如何在SQL Server中一次性授予多个模式的访问权限

3

对于SQL Server数据库管理领域,我相当陌生。

以下是我的SQL代码,用于创建登录名、用户并授予权限。

USE TestDb
GO

CREATE LOGIN [TestLogin] 
       WITH PASSWORD = N'123', DEFAULT_DATABASE = [TestDb], 
       CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF
GO

CREATE USER SqlUser FOR LOGIN [TestLogin]

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: dbo  to SqlUser

这个运行良好并创建用户/登录。他可以访问dbo模式。

但是我需要在SCHEMA选项中指定多个模式。

因此,我尝试了以下方法:

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: [dbo,app]  to SqlUser

但是我遇到了一个错误:

无法找到模式“dbo;app”,因为它不存在或您没有权限。

如何在以上SQL模式中指定多个模式以授予用户访问权限?

谢谢!


简单来说:你不能这样做 - 你必须一个一个地处理这个模式 - 你不能同时授予多个模式的权限。 - marc_s
1个回答

5

您需要运行多个语句:

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::dbo TO SqlUser
GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::app TO SqlUser

如果您经常这样做,或者有多个用户需要这些权限,那么最好创建一个角色(ROLE),然后将用户添加到该角色(ROLE)。这样可以使用ALTER ROLE在单个语句中完成操作。

CREATE ROLE SqlRole; --Give a better, more appropriate name
GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::dbo TO SqlRole;
GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::app TO SqlRole;

GO

ALTER ROLE SqlRole ADD MEMBER SqlUser;

另外,是否可以将多个用户分配给一个登录名?因为这样做时会出现错误“登录名已经有一个不同用户名的帐户”。 - Kgn-web
当将上述查询封装在存储过程中时,它会抛出错误 https://pastebin.pl/view/9257bbfc - Kgn-web
@Laru 已在帖子中添加了sp和错误,请问您有何建议?谢谢! - Kgn-web
不是取值,而是将名称作为“@loginName”和“@userName”。 - Kgn-web
那应该是一个不同的问题,@Kgn-web,然而,错误很明显,你试图使用变量来替换文本常量。CREATE LOGIN [@Login]会创建一个名为@LoginLOGIN,而不是一个带有@Login值的LOGIN。这不是 SQL 的工作方式。提出一个新问题,因为这是一个不同的问题。 - Thom A
显示剩余4条评论

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