Bre*_*zar 15 security sql-server
我想创建一个登录,该登录被拒绝写入任何数据库的能力 - 不仅仅是今天存在的数据库,还有任何新创建的数据库或从其他服务器恢复的数据库。
我不能使用仅限数据库的角色(甚至不能在模型中使用),因为这些角色不会对新恢复的数据库生效。
(商业目的:我正在写一篇关于人们如何为自己设置低权限的新登录的博客文章,并且他们可以确保他们在复制/粘贴代码时不会意外地有“哎呀”时刻或者在没有 where 子句的情况下运行它。)
小智 15
如果您可以在执行之间使用有限的时间(至少 10 秒)来捕获新的/恢复的数据库,您可以创建一个预定的 SQL Server 代理作业并将类似的内容放入 T-SQL 作业步骤中:-
SET NOCOUNT ON
DECLARE @command nvarchar(max) ;
SET @command =
N'SET NOCOUNT ON
DECLARE @UserName sysname ;
SELECT @UserName = USRS.[name]
FROM sys.database_principals AS USRS
INNER JOIN sys.server_principals AS LGNS ON LGNS.[sid] = USRS.[sid]
WHERE LGNS.[name] = ''LoginName'' ;
IF IS_ROLEMEMBER(''db_denydatawriter'', @UserName) = 0
BEGIN
EXEC sp_addrolemember ''db_denydatawriter'', @UserName ;
END ;' ;
EXEC sp_ineachdb
@command = @command,
@state_desc = N'ONLINE',
@is_read_only = 0 ;
Run Code Online (Sandbox Code Playgroud)