Azure sql database Azure SQL数据库用户未继承角色权限

Azure sql database Azure SQL数据库用户未继承角色权限,azure-sql-database,azure-active-directory,Azure Sql Database,Azure Active Directory,我在Azure SQL数据库中创建了包含的数据库角色,授予了这些角色的权限,创建了映射到Azure Active Directory的数据库用户,并将数据库用户添加到了适用的角色。但是,用户似乎不会自动继承角色的权限(我已经确认它们已成功添加)。我漏了一步吗 创建用户[USER]。Name@Company.com]来自外部提供商 ALTER ROLE[DATABASE-ROLE]添加成员[User]。Name@Company.com] 注意:角色具有选择和查看定义权限,但用户仅显示连接权限。我也

我在Azure SQL数据库中创建了包含的数据库角色,授予了这些角色的权限,创建了映射到Azure Active Directory的数据库用户,并将数据库用户添加到了适用的角色。但是,用户似乎不会自动继承角色的权限(我已经确认它们已成功添加)。我漏了一步吗

创建用户[USER]。Name@Company.com]来自外部提供商 ALTER ROLE[DATABASE-ROLE]添加成员[User]。Name@Company.com]


注意:角色具有选择和查看定义权限,但用户仅显示连接权限。

我也有同样的问题。我运行以下命令来创建一个具有select权限的角色,并将该角色分配给Azure AD用户

CREATE ROLE testrole AUTHORIZATION [dbo]
GO

-- Grant access rights to a specific schema in the database
GRANT 
    SELECT, 
    VIEW DEFINITION 
ON SCHEMA:: [dbo]
    TO testrole
GO
create user [jim@hanxia.onmicrosoft.com] from EXTERNAL PROVIDER
GO
ALTER ROLE testrole ADD MEMBER [jim@hanxia.onmicrosoft.com]
GO
然后我运行命令:

    SELECT p.NAME
    ,m.NAME
    FROM sys.database_role_members rm
    JOIN sys.database_principals p
    ON rm.role_principal_id = p.principal_id
    JOIN sys.database_principals m
    ON rm.member_principal_id = m.principal_id 
    GO
    SELECT DISTINCT pr.principal_id, pr.name, pr.type_desc, 
    pr.authentication_type_desc, pe.state_desc, pe.permission_name
    FROM sys.database_principals AS pr
    JOIN sys.database_permissions AS pe
    ON pe.grantee_principal_id = pr.principal_id;
这表明我已将角色分配给用户,并且用户仅具有连接权限

但我运行命令:

EXECUTE AS user = 'jim@hanxia.onmicrosoft.com'  
select * from student
这表明用户具有选择权限


所以我认为Transact-SQL支持Azure SQL数据库中的Azure AD用户并不是完美的。是这样吗?有人能解释一下吗?

我也有同样的问题。我运行以下命令来创建一个具有select权限的角色,并将该角色分配给Azure AD用户

CREATE ROLE testrole AUTHORIZATION [dbo]
GO

-- Grant access rights to a specific schema in the database
GRANT 
    SELECT, 
    VIEW DEFINITION 
ON SCHEMA:: [dbo]
    TO testrole
GO
create user [jim@hanxia.onmicrosoft.com] from EXTERNAL PROVIDER
GO
ALTER ROLE testrole ADD MEMBER [jim@hanxia.onmicrosoft.com]
GO
然后我运行命令:

    SELECT p.NAME
    ,m.NAME
    FROM sys.database_role_members rm
    JOIN sys.database_principals p
    ON rm.role_principal_id = p.principal_id
    JOIN sys.database_principals m
    ON rm.member_principal_id = m.principal_id 
    GO
    SELECT DISTINCT pr.principal_id, pr.name, pr.type_desc, 
    pr.authentication_type_desc, pe.state_desc, pe.permission_name
    FROM sys.database_principals AS pr
    JOIN sys.database_permissions AS pe
    ON pe.grantee_principal_id = pr.principal_id;
这表明我已将角色分配给用户,并且用户仅具有连接权限

但我运行命令:

EXECUTE AS user = 'jim@hanxia.onmicrosoft.com'  
select * from student
这表明用户具有选择权限


所以我认为Transact-SQL支持Azure SQL数据库中的Azure AD用户并不是完美的。是这样吗?有人能解释一下吗?

这就是答案。您唯一缺少的是继承的权限是在运行时计算的,并且不会显示在sys.database\u permissions中。您的回答表明,用户实际上拥有select权限,查询用户的有效权限时也是如此。
select*from fn_my_permissions('dbo','schema')
confirm:在今天的一些测试中,我意外发现了这一点-用户继承了权限,即使它们没有出现在我的权限查询中。谢谢你,大卫!!这就是答案。您唯一缺少的是继承的权限是在运行时计算的,并且不会显示在sys.database\u permissions中。您的回答表明,用户实际上拥有select权限,查询用户的有效权限时也是如此。
select*from fn_my_permissions('dbo','schema')
confirm:在今天的一些测试中,我意外发现了这一点-用户继承了权限,即使它们没有出现在我的权限查询中。谢谢你,大卫!!