sql-server - Azure SQL 数据库 - 应用程序用户设置
问题描述
我正在使用带有分片的 Azure SQL 数据库(单租户方法)。因此,当应用程序连接到 DB 时,它会进入 Shard 并创建与租户 DB 的正确连接(租户由登录名标识)。但是,我们在开发阶段一直在使用服务器管理员凭据。现在,我想创建一个单独的应用程序用户,与服务器管理员相比,它的权限要有限得多。在一个非常一般的情况下,我想要一个用户可以连接到 Shard Map 并找出到任何 Shard 的连接字符串,但对每个分片具有不同的权限。例如,某些应用程序用户可能需要能够以完全读写权限连接到 DB_1,以只读权限连接到 DB_2 而没有连接到 DB_3 的权限。
在更简单的情况下,我只需要一个对 ShardMap 和其他内部数据库没有任何更新权限但对所有租户数据库(分片)具有正常读/写/执行访问权限的用户。
我在谷歌上搜索并没有找到任何好的食谱如何做到这一点,最佳实践是什么等。如果有人可以回答我或指向文档,我将不胜感激。谢谢你!
解决方案
在每个数据库中为应用程序用户创建一个角色,并授予应用程序运行所需的最小权限。在这里授予架构级别的权限是一个不错的选择,因为您不必管理对象级别的权限。
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];
推荐阅读
- anaconda - Pytorch 在 conda 上安装失败,错误为 -CondaHTTPError: HTTP 403 FORBIDDEN for url
- excel - 使用自动过滤器删除行时面临问题
- ruby - 有没有更有效的方法来使用 Ruby 控制控制台光标(马车位置等)?
- elasticsearch - 如何在elasticsearch中索引csv文档?
- ios - SwiftUI - 如何从不同的视图中获取 GeometryReader 的大小/高度?
- swift - SwiftUI 视图到 AppKit 中的 NSImage
- php - 如何从数据库中显示有关性别用户的信息?
- tensorflow - Keras 模型给出了巨大的负值并且模型根本没有训练
- cors - CORS 阻止 ImageWMS 访问
- javascript - 在 Mongoose 中添加和删除好友