颁发给域\用户的GRANT语法

31

我想给一个活动目录用户访问仅限于一个特定的表。我希望他们可以插入、更新、删除等操作,但是只限于那个表。我知道这个命令:

GRANT Insert, Select on Tablename to user

但是我无法弄清楚如何在语法上让"domain\user"起作用。 我尝试了:

GRANT Insert, Select on Tablename to domain\user

但我得到的是:

Msg 102,级别 15,状态 1
错误语法 ' \' '附近。


离题了,这不是一个编程问题。请尝试访问DBA SE网站。 - Marc B
5
@MarcB如何将语法问题不视为程序设计问题? - Aaron Bertrand
@aaron:就像“无法使Word中的一行文本变为斜体”不是一个编程问题一样,除非您正在尝试通过COM或其他方式以编程方式构建Word文件。 - Marc B
4
他们显然尝试了 GRANT ... TO domain\user,并得到了 Msg 102, Level 15, State 1, Line 181 Incorrect syntax near '\' 的错误信息。你是在暗示我的答案不是关于编程的答案,而仅仅与数据库管理有关吗?如果是这样,我完全不同意。 - Aaron Bertrand
1
@MarcB,你对Aaron的回答背离了这个问题应该被关闭的真正原因——不要只是把垃圾踢到DBA.SE上。 - swasheck
@MarcB 如果你把这个问题告诉你的数据库管理员,我想他会严厉地责备你。 - Zane
2个回答

51
假设您已经在此数据库中创建了与 AD 登录相关联的用户,例如:
CREATE LOGIN [domain\user] FROM WINDOWS;
GO
USE your_database;
GO
CREATE USER [domain\user] FROM LOGIN [domain\user];
GO

然后你只需按照相同的语法进行操作。因为 \ 不是标识符的标准字符,所以你需要用 [方括号] 对名称进行转义:

GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Tablename TO [domain\user];

1
谢谢Aaron,那个方法可行!我试了各种引号,甚至没有考虑过方括号。 - bvankampen

1

创建角色并将用户添加到该角色中是一个好的实践。然后授予该角色权限。

USE database_name
GO

--1)create role 
CREATE ROLE role_name
GO

--2 create user
IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'domain\user')
BEGIN
    CREATE USER [domain\user] FOR LOGIN [domain\user]
END;
GO

-- 3 Add user to the role
ALTER ROLE [role_name] ADD MEMBER [domain\user]
GO

--4 Grant permissions to the role
GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Tablename TO [role_name];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接