在SQL Server 2005中使用GRANT和DENY的变量

Sam*_*mWM 3 sql-server sql-server-2005

在SQL Server 2005中,如何将用户名的变量用于GRANT或DENY对具有数据库的对象的权限?我试过了:

DECLARE @username varchar(30)
SET @username = 'DOMAIN\UserName'
GRANT SELECT ON [mytable] TO @username
GRANT UPDATE([field one], [field two], [field three]) ON [mytable] TO @username
Run Code Online (Sandbox Code Playgroud)

我明白了Incorrect syntax near '@username',然后我将它包裹在[和]中

GRANT SELECT ON [mytable] TO [@username]
Run Code Online (Sandbox Code Playgroud)

然而,这导致了Cannot find the user '@username', because it does not exist or you do not have permission.如何在不输入每个语句的用户名的情况下执行此操作?我想这样做是为了减少任何拼写错误的机会(这可能导致错误的用户获得权限设置)

SQL*_*ace 7

你需要动态的SQL,如果你想看看将要执行什么,请将EXEC改为PRINT添加了引号功能,因为你需要围绕域用户使用括号

 DECLARE @username varchar(30)
SET @username = 'DOMAIN\UserName'

SET @username = quotename(@username)

exec  ('GRANT SELECT ON [mytable] TO ' + @username )
exec ('GRANT UPDATE([field one], [field two], [field three]) ON [mytable] TO ' + @username )
Run Code Online (Sandbox Code Playgroud)