我试图只允许一个特定的表访问活动目录用户。我希望他们能够插入,更新,删除等,但仅限于该表。我知道这个命令:
GRANT Insert, Select on Tablename to user
但我无法弄清楚如何让“域\用户”以语法方式工作。我试过了:
GRANT Insert, Select on Tablename to domain\user
但我得到:
Msg 102,Level 15,State 1 '\'附近的语法不正确。
假设您已在此数据库中创建了与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];
最好是创建角色并将用户添加到该角色。然后为该角色授予权限。
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];