【问题标题】:How to grant access to multiple schemas in one go in SQL Server如何在 SQL Server 中一次性授予对多个架构的访问权限
【发布时间】:2020-02-21 18:08:07
【问题描述】:

对于 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 模式中指定多个模式以授予用户访问权限?

谢谢!

【问题讨论】:

  • 很简单:你不能 - 你必须在下一个模式之前执行这个模式 - 你不能同时授予多个模式的权限

标签: sql sql-server database


【解决方案1】:

您必须运行多个语句:

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;

【讨论】:

  • 非常感谢! @Larnu 赞赏
  • 另外,是否可以将多个用户分配给一个登录。因为这样做时会出现错误Login already has an account under a different user name
  • 不,@Kgn-web 、A USERLOGIN 是一对一的关系。但是,如果您使用 AD,则可以为 AD 组创建USER/LOGIN,而不是单个 AD 用户。但这是一个非常不同的问题。
  • 包装上述查询时,在 sp 中会抛出错误 pastebin.pl/view/9257bbfc
  • 什么错误,@Kgn-web。我收到该站点的 SSL 证书错误,因此我没有对其进行审查。该代码本身可以运行,这表明存在实施错误。
猜你喜欢
  • 2016-02-14
  • 2010-09-26
  • 2012-02-03
  • 2013-09-25
  • 1970-01-01
  • 2014-03-27
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
相关资源
最近更新 更多