sql - SQL Azure 管理员用户可以创建其他管理员吗?
问题描述
我有一个使用 SQL Azure 数据库的客户端。
他们希望能够管理用户的创建和删除。
我是服务器管理员,并设置了初始 Azure 订阅。
我为他们创建了一个“管理员”用户,如下所示:
--On master
CREATE LOGIN TestAdmin
WITH PASSWORD = 'ThePassword'
CREATE USER TestAdmin
FOR LOGIN TestAdmin
ALTER ROLE loginmanager
ADD MEMBER TestAdmin
--On UserDB
CREATE USER TestAdmin
FOR LOGIN TestAdmin
--Add to db_AccessAdmin
--so the admin can add or remove access to the database
ALTER ROLE db_accessadmin
ADD MEMBER TestAdmin
--For the admin, use the built-in roles
ALTER ROLE db_datareader
ADD MEMBER TestAdmin
ALTER ROLE db_datawriter
ADD MEMBER TestAdmin
GRANT EXECUTE
TO TestAdmin
--And allow the admin to make structural changes if required:
ALTER ROLE db_ddladmin
ADD MEMBER TestAdmin
--Allow Admin to manage role membership
ALTER ROLE db_securityadmin
ADD MEMBER TestAdmin
我创建了新管理员可以通过应用程序执行的代码,以允许该管理员创建一个新的“标准”用户,如下所示:
--ON User Database:
--To create new (non-admin) user
CREATE USER TestUser WITH PASSWORD='P@ssw0rd!'
ALTER ROLE DBUser ADD MEMBER TestUser
注意:名为 DBUser 的角色是我创建的类似于 db_datareader 和 db_datawriter 组合的角色,因此我们不会使用这些内置角色,而不是管理员,并且可以根据需要授予更精确的权限.
这很好用,新用户可以做他们需要做的所有事情。
但是,他们希望新管理员能够创建新管理员....或不可能。
新管理员本质上需要运行与我在上面运行的代码相同的代码来创建 TestAdmin。
他们可以登录到 Master,然后运行:
CREATE LOGIN TestAdminsAdmin
WITH PASSWORD = 'ThePassword'
但是在 Master 上执行的下一行将是这样的:
CREATE USER TestAdminsAdmin
FOR LOGIN TestAdminsAdmin
这失败了,因为“用户无权执行此操作。”。
我是否可以授予新管理员允许他们在 Master 上执行此操作的权限,或者这是“设计使然”的安全限制?
解决方案
In Azure SQL database, the master database just has two roles dbmanager
and loginmanager
. One role has permissions to create and delete databases. The other role has permissions to create and delete logins in the master database. So if we want to creat user in the master database, we must use the admin account. For more details, please refer to here and here.
推荐阅读
- elasticsearch - 启用 _source 后需要有关索引大小增加的信息
- c++ - 检查组合框列表中的字符串
- sql-server - Jira 服务器插件 - Atlassian PocketKnife - QueryDSL - 使用 executewithKeys() 批量插入不适用于 ORACLE 和 SQL Server
- file - Drupal 8 - 图像字段的上传按钮未显示
- istio - Openshift Istio 应用程序
- python-3.x - 使用 Popen 子进程使用 curl 命令下载文件
- sh - date command not found in shell script
- python - 为什么我的代码不起作用?在匹配之前找到一个单词
- spring - 日志文件零扩展名
- django - Django Viewflow: Quick Start 说要包含 formpack。什么是表格包?