问题标签 [execute-as]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - 在 SQL Server 存储过程中执行
我在 SQL 存储过程中使用 Execute as user 时遇到了一些问题。
我有两个用户名为 user1 和 user2。
User1 刚刚在TestDB
User2 中具有公共访问权限,在TestDB
我创建了一个存储过程中具有执行权限,如下所示:
当我在 User2 的安全上下文下执行 sproc 时,如下所示
它从 . 返回所有记录[dbo].[accounts]
。我假设 User1 应该在 [dbo].[accounts] 上具有 SELECT 权限以返回记录,但这里存储的 proc 返回结果。此外,调用者 User2 对表 [dbo].[accounts] 没有 SELECT 权限。如果这里有什么问题,请纠正我?
sql-server - 是否可以稍后在对象中调用 EXECUTE AS OWNER ?
考虑这段代码:
在每个表上,都有一个安全策略不允许更改TenantId
表上除绑定到数据库用户的列之外的列,但该策略将允许“sa”用户进行更改。
问题是TenantId
,我需要TenantId
与调用主体一起获取,因为TenantId
绑定到数据库用户。我知道一个解决方案:没有with execute
触发器并调用一个过程,with execute
在我获取TenantId
并将其传递给过程之后,我必须将表插入到临时表中,以便我可以在过程中访问它。
我想要一个更好的解决方案execute as owner
,在我得到TenantId
. 从逻辑上讲它是有效的,但问题是;他们实施了吗?execute as login = 'sa'
您可以在代码中看到这不是一个好的解决方案,因为它要求当前登录能够模拟sa
登录。
此触发器的要点是允许用户不指定TenantId
插入。我什至不必TenantId
在应用程序中提及,一切都只在 SQL Server 上。
另一种解决方案是,如果对象的创建者可以在对象上写入一些我可以在安全策略中读取的信息,并基于该信息允许用户更新TenantId
. 它甚至可能是对象的权限,但问题是我如何才能读取导致调用安全策略的对象?
sql-server - 尝试以编程方式创建 sql server 代理作业时执行为不模拟权限
我正在尝试创建一个存储过程,以编程方式创建作业和步骤并运行它。这可行,但我还需要模拟用户,因为最终用户无权执行此操作。
我创建了一个测试用户 (sa2) 并授予它权限,我可以正常运行我的程序。如果我添加 WOTJ EXECUTE AS 'sa2' (或所有者)行并在仍以 sa2 身份登录的同时运行相同的过程,则会收到以下错误:
消息 229,级别 14,状态 5,过程 msdb..sp_add_job,第 1 行 [批处理开始第 2 行] 对象“sp_add_job”、数据库“msdb”、架构“dbo”的执行权限被拒绝。消息 229,级别 14,状态 5,过程 msdb..sp_add_jobstep,第 1 行 [批处理开始第 2 行] 对象“sp_add_jobstep”、数据库“msdb”、模式“dbo”的执行权限被拒绝。消息 229,级别 14,状态 5,过程 msdb..sp_add_jobserver,第 1 行 [批处理开始第 2 行] 对象“sp_add_jobserver”、数据库“msdb”、架构“dbo”的执行权限被拒绝。消息 229,级别 14,状态 5,过程 msdb..sp_start_job,第 1 行 [批处理开始第 2 行] 对象“sp_start_job”、数据库“msdb”、架构“dbo”的执行权限被拒绝。
我的最终目标是让它为另一个用户工作,但我不能以 sa2 身份登录并在过程声明中包含 EXECUTE AS 行,这似乎很奇怪。
有谁知道这是为什么,我能做些什么来解决它?
sql-server - SQL Server EXECUTE AS 不当行为
我有一个用户,我使用以下方式授予访问凭据的权限:
当我使用该用户登录时,以下内容会返回我的数据
我可以看到我拥有 SERVER 级别的权限。这可以通过执行来验证
使用另一个用户,比如 userB,我通过做给 userA 进行了模拟
在存储过程中,以 userB 身份登录时,我将上下文切换到 userA
SELECT * FROM fn_my_permissions (NULL, 'SERVER')
不会给我 ALTER ANY CREDENTIAL 许可。
SELECT * FROM sys.credentials
不返回任何值。
SELECT user_name()
但是返回给我 userA。
我在这里错过了什么吗?为什么我不能像 userA 那样从 sys.credentials 中获取数据?
谢谢!