Han*_*non 3 security sql-server best-practices
我的任务是创建一个允许非特权用户启动和停止 SQL Server 代理作业的系统。我正在使用构造运行等dbo
在msdb
数据库的架构中创建存储过程。WITH EXECUTE AS OWNER
EXEC dbo.sp_start_job <JobID>;
在联机丛书主题约EXECUTE AS
说,这是一个“最佳实践”:
指定具有执行模块中定义的操作所需的最低权限的登录名或用户。例如,除非需要这些权限,否则不要指定数据库所有者帐户。
在我的情况下,EXECUTE AS OWNER
表示[sa]
,因为这些模块在dbo
架构中,在 msdb 数据库中,该数据库始终归[sa]
.
我这样做是否无意中造成了安全风险?
我没有传入任何可用于 SQL 注入攻击的参数,因为传入的唯一参数是UNIQUEIDENTIFIER
表示受影响的作业。
运行存储过程的用户EXECUTE AS OWNER
除了我明确创建的数据库角色的成员资格外,无权访问 msdb 数据库,他们拥有对存储过程GRANTs
的EXECUTE
权限。
其中一个项目的条件是有问题的用户应该不能够以任何方式运行SQL Server代理GUI工具。这排除了为他们提供内置SQLAgentUserRole
角色的成员资格。我也宁愿不修改 等的权限dbo.sp_start_job
,因为我试图不修改 SQL Server 本身所依赖的任何内容(除了显然将项目添加到 msdb 数据库本身之外)。
有问题的代码在这里。
就其本身而言,不,您可能不会增加安全风险。只要除了系统管理员之外没有人可以更改程序,并且只要程序可以做的唯一一件事就是开始一项工作,我就看不到问题。
MSDB 被(并且应该)标记为TRUSTWORTHY
. 这意味着通过使用EXECUTE AS OWNER
您可以模拟 SERVER 级别的权限。在这种情况下,因为这sa
意味着您可以创建一个过程来授予另一个用户 sysadmin。
这确实意味着您确实希望限制对 MSDB 的权限。
归档时间: |
|
查看次数: |
1654 次 |
最近记录: |