域\用户的GRANT语法

问题描述 投票:22回答:2

我试图只允许一个特定的表访问活动目录用户。我希望他们能够插入,更新,删除等,但仅限于该表。我知道这个命令:

GRANT Insert, Select on Tablename to user

但我无法弄清楚如何让“域\用户”以语法方式工作。我试过了:

GRANT Insert, Select on Tablename to domain\user

但我得到:

Msg 102,Level 15,State 1 '\'附近的语法不正确。

sql-server sql-server-2008 active-directory grant
2个回答
32
投票

假设您已在此数据库中创建了与AD登录相关联的用户,例如

CREATE LOGIN [domain\user] FROM WINDOWS;
GO
USE your_database;
GO
CREATE USER [domain\user] FROM LOGIN [domain\user];
GO

那你只需要遵循相同的语法。因为\不是标识符的标准字符,所以需要使用[square brackets]来转义名称:

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

0
投票

最好是创建角色并将用户添加到该角色。然后为该角色授予权限。

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];
© www.soinside.com 2019 - 2024. All rights reserved.