如何将对用户的访问限制为特定的架构?

时间:2019-09-12 17:52:27

标签: sql sql-server database-security azure-sql-data-warehouse

我正在尝试授予用户对特定架构的访问权限。这意味着他们将能够访问特定方案中的对象,并且只能在该特定方案中创建/更改/管理对象。

尝试执行下面的代码,但是看起来它可以提供在整个数据库上创建对象的访问权限。

CREATE ROLE [NewRole]
GO
CREATE SCHEMA [schema1]
GO
ALTER AUTHORIZATION ON SCHEMA::schema1 TO [NewRole]
GO
GRANT ALTER ON SCHEMA::[schema1] TO [NewRole]
GO
GRANT CREATE TABLE TO [NewRole]
GO
GRANT CREATE VIEW TO [NewRole]
GO
GRANT CREATE PROCEDURE TO [NewRole]

有人建议如何进行此操作吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

  

尝试执行下面的代码,但是看起来它可以提供在整个数据库上创建对象的访问权限。

不是。 CREATE DATABASE仅可在整个数据库上授予,但不会自动授予您将对象放入任何模式的能力。您还 需要对目标架构具有ALTER权限,通常您可以通过成为目标架构的所有者来获得这些权限。

这就是您所需要的:

CREATE ROLE [NewRole]
GO
CREATE SCHEMA [schema1]
GO
ALTER AUTHORIZATION ON SCHEMA::schema1 TO [NewRole]
GO
GRANT CREATE TABLE, CREATE VIEW, CREATE PROCEDURE TO [NewRole]

您实际上永远不需要在模式上授予ALTER。