Mel*_*elC 6 security sql-server ddl users logins
有没有办法根据表中的一组用户禁用多个 sql 登录?例如:
ALTER LOGIN (Select userid from tbl_user) DISABLE;
Run Code Online (Sandbox Code Playgroud)
不,您不能向ALTER LOGIN命令提供查询。但是您可以使用动态 SQL 轻松构建命令:
DECLARE @sql nvarchar(max) = N'',
@cmd nvarchar(550) = N'ALTER LOGIN $$$ DISABLE;'
+ CHAR(13) + CHAR(10);
SELECT @sql += REPLACE(@cmd, N'$$$', QUOTENAME(userid))
FROM dbo.tbl_user;
PRINT @sql;
-- EXEC sys.sp_executesql @sql;
Run Code Online (Sandbox Code Playgroud)
当您对输出感到满意时,取消注释EXEC.
请注意,如果该表中有很多用户,您将无法使用 看到整个命令PRINT,因为输出长度有限制。有关解决方法,请参阅此提示。
此外,这里没有错误处理,因此您实际上应该添加TRY/CATCH或加入以sys.server_principals确保禁用实际存在的登录:
SELECT @sql += REPLACE(@cmd, N'$$$', QUOTENAME(p.name))
FROM dbo.tbl_user AS u
INNER JOIN master.sys.server_principals AS p
ON p.name = u.userid;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
907 次 |
| 最近记录: |