Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在Azure数据仓库(Synapse)中授予架构级权限?_Sql Server_Azure_Azure Active Directory_Database Schema_Azure Synapse - Fatal编程技术网

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

Sql server 如何在Azure数据仓库(Synapse)中授予架构级权限?,sql-server,azure,azure-active-directory,database-schema,azure-synapse,Sql Server,Azure,Azure Active Directory,Database Schema,Azure Synapse,在我们的Azure SQL数据仓库(Synapse)中,我们有两个模式dbo和staging。 我只想将架构级别的权限授予我的Azure Active Directory组用户“dbo”架构。我正在寻找的预期行为是,授予此权限后,Azure Active Directory组用户在ssms中打开数据库时不应看到暂存架构。我尝试了以下方法来创建用户并授予权限,但用户仍然可以在其SSM中看到stagingschema 我创建了用户并使用以下命令添加了db_datareader角色: 然后使用以下命令

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

  • 我创建了用户并使用以下命令添加了
    db_datareader
    角色:
  • 然后使用以下命令授予架构级权限:
  • 以下查询返回:
  • 有人知道我如何给架构级权限吗?我被卡住了! Thnaks

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

    有两种方法可以解决这个问题:

  • 撤销
    db_datareader
    权限并将该权限授予用户
  • EXEC sp_droprolember'db_datareader','Azure Active Directory组'
    将SCHEMA::dbo上的SELECT授予[Azure Active Directory组]
    
  • 我们还可以添加自定义角色并授予该角色权限
  • 创建角色;
    将schema::dbo上的SELECT授予;
    EXEC sp_addrolemember“”,“Azure Active Directory组”
    
    谢谢,@Joseog Xu,为什么在撤销
    db_datareader
    后,我不能直接使用
    将SCHEMA::dbo上的SELECT授予[Azure Active Directory组]
    ?为什么我需要创建
    外部\u用户
    角色?您还可以直接使用
    将SCHEMA::dbo上的SELECT授予[Azure Active Directory组]
    external_users
    是我创建的自定义角色的名称,您不需要创建角色。创建自定义角色是为了重用此权限。您好@mas,我已经更新了我的答案。如果您需要更多信息,请告诉我。
    CREATE USER [Azure Active Directory Group] FROM EXTERNAL PROVIDER WITH DEFAULT_SCHEMA = dbo;
    EXEC sp_addrolemember 'db_datareader', 'Azure Active Directory Group'
    
    GRANT SELECT ON SCHEMA::dbo TO [Azure Active Directory Group]
    
    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';