如何在 SQL Server 中一次性授予对多个架构的访问权限

Kgn*_*web 4 sql database sql-server

对于 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
Run Code Online (Sandbox Code Playgroud)

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

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

所以我尝试了:

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: [dbo,app]  to SqlUser
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

找不到架构“dbo;app”,因为它不存在或您没有权限。

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

谢谢!

use*_*983 6

您必须运行多个语句:

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::dbo TO SqlUser
GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::app TO SqlUser
Run Code Online (Sandbox Code Playgroud)

如果这是您经常执行的操作,或者多个用户需要这些权限,那么您最好创建一个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;
Run Code Online (Sandbox Code Playgroud)