首页 > 解决方案 > Azure SQL 数据库 - 应用程序用户设置

问题描述

我正在使用带有分片的 Azure SQL 数据库(单租户方法)。因此,当应用程序连接到 DB 时,它会进入 Shard 并创建与租户 DB 的正确连接(租户由登录名标识)。但是,我们在开发阶段一直在使用服务器管理员凭据。现在,我想创建一个单独的应用程序用户,与服务器管理员相比,它的权限要有限得多。在一个非常一般的情况下,我想要一个用户可以连接到 Shard Map 并找出到任何 Shard 的连接字符串,但对每个分片具有不同的权限。例如,某些应用程序用户可能需要能够以完全读写权限连接到 DB_1,以只读权限连接到 DB_2 而没有连接到 DB_3 的权限。

在更简单的情况下,我只需要一个对 ShardMap 和其他内部数据库没有任何更新权限但对所有租户数据库(分片)具有正常读/写/执行访问权限的用户。

我在谷歌上搜索并没有找到任何好的食谱如何做到这一点,最佳实践是什么等。如果有人可以回答我或指向文档,我将不胜感激。谢谢你!

标签: sql-serverazure-sql-database

解决方案


在每个数据库中为应用程序用户创建一个角色,并授予应用程序运行所需的最小权限。在这里授予架构级别的权限是一个不错的选择,因为您不必管理对象级别的权限。

create role ApplicationUsers;
grant select, insert, update, delete, execute on schema::dbo to ApplicationUsers;

然后,如果您想要一个身份来访问所有数据库,请使用密码创建一个登录名。然后在每个租户数据库中创建一个映射到该登录名的用户。

--create a server-level Login
create login AppUser with Password ='asdfAds01980(*)(*)(#&$)#@';
--add a user mapped to that login in each database 
create user AppUser for login AppUser;
alter role ApplicationUsres add member AppUser;

或者在每个数据库中使用不同的密码或映射到Azure Active Directory 标识的数据库用户创建一个用户

create user AppUser with Password ='asdfAds01980(*)(*)(#&$)#@';
alter role ApplicationUsers add member AppUser;

或者

create user [tenant123user@mydomain.onmicrosoft.com] from external provider;
alter role ApplicationUsers add member [tenant123user@mydomain.onmicrosoft.com];

推荐阅读