我有一个奇怪的权限问题。最近发生的事情导致配置为以特定用户身份运行的现有 SQL Server 代理作业停止工作。他们以前工作过;他们现在抛出基本权限错误(例如,SELECT 权限被拒绝)。
这是一个特定的测试用例。用户johndoe
具有服务器级sysadmin
角色。johndoe
在 SQL Server Management Studio 中运行时,以下查询工作正常:
select * from TableA into TableB
Run Code Online (Sandbox Code Playgroud)
但是,当我将完全相同的查询放入单步 SQL Server 代理作业中,并将该步骤配置为以用户身份运行时johndoe
,我收到以下错误。
以用户身份执行:johndoe。对象“TableA”、数据库“MyDatabase”、架构“dbo”的 SELECT 权限被拒绝。[SQLSTATE 42000](错误 229)。步骤失败。
关于什么可能导致这种看似自发的变化的任何建议?
我有一个带有 SQL Server 托管数据库的应用程序。我无权访问应用程序代码,但我可以完全访问数据库。我已将自己的自定义审计添加到表中以帮助调试。
我正在使用after
触发器。以下是我的触发器的简化版本。
问题:我看到update
在相应insert
审计记录之前的审计记录。这怎么可能?差异只有几毫秒,对于我目前的目的并不重要,但我可以想象更糟糕的情况,其中程序逻辑取决于正确的年表。
我知道在相同类型的触发器(全部insert
或全部update
)之间控制触发器执行顺序的方法。我可以对异构触发器执行顺序做出哪些假设?
create trigger dbo.MyTrigger_i on dbo.theTable
after insert
as
begin
set nocount on
declare @Date datetime, @User sysname
set @Date = GETDATE()
set @User = SUSER_SNAME()
insert into MyAudit (RowID, [Date], UserName, Comment)
select i.ID, @Date, @User, 'Insert'
from
inserted as i
end
go
create trigger dbo.MyTrigger_u on dbo.theTable
after update
as
begin
set nocount on
declare @Date datetime, @User sysname
set @Date …
Run Code Online (Sandbox Code Playgroud)