如何在 Azure 数据仓库 (Synapse) 中授予架构级别权限?

How to give Schema Level permission in Azure Data Warehouse (Synapse)?

在我们的 Azure SQL 数据仓库 (Synapse) 中,我们有两个模式 dbostaging。 我只想向我的 Azure Active Directory 组 用户授予架构级权限 'dbo' 架构。我正在寻找的预期行为是,在授予此权限后,Azure Active Directory 组 用户在 ssms 中打开数据库时不应看到 staging 架构。我尝试了以下方法来创建用户并授予权限,但用户仍然在他们的 ssms 中看到 staging 架构。

  1. 我使用以下方法创建了用户并添加了 db_datareader 角色:
CREATE USER [Azure Active Directory Group] FROM EXTERNAL PROVIDER WITH DEFAULT_SCHEMA = dbo;
EXEC sp_addrolemember 'db_datareader', 'Azure Active Directory Group'
  1. 然后使用以下方式授予架构级别权限:
GRANT SELECT ON SCHEMA::dbo TO [Azure Active Directory Group]
  1. 以下查询returns:
select pr.name,
       pr.type_desc,
       pe.permission_name,
       pe.state_desc,
       pe.class_desc,
       object_name(pe.major_id)

FROM sys.database_principals AS pr
JOIN sys.database_permissions AS pe
    ON pe.grantee_principal_id = pr.principal_id where name='Azure Active Directory Group Users';

有人知道我如何授予架构级别权限吗?我卡住了!

db_datareader:db_datareader固定数据库角色的成员可以读取所有用户表中的所有数据。这意味着 db_datareader 角色可以查看所有模式。所以我们需要撤销这个权限。

有两种解决问题的方法:

  1. 撤消 db_datareader 权限并将权限授予用户。
EXEC sp_droprolemember 'db_datareader', 'Azure Active Directory Group'

GRANT SELECT ON SCHEMA::dbo TO [Azure Active Directory Group]
  1. 我们还可以添加一个自定义角色,并授予该角色权限。
CREATE ROLE <Role_Name>; 

GRANT SELECT ON schema::dbo TO <Role_Name>;

EXEC sp_addrolemember '<Role_Name>', 'Azure Active Directory Group'