我有一个要求,我需要通过打开主连接在azure SQL数据库中创建一个新数据库。因此,我需要检查该用户是否有权创建新数据库。对于传统 SQL,我向用户提供“dbcreator”卷并且
string query = "SELECT IS_SRVROLEMEMBER('dbcreator') IS_DBCREATOR";
使用上面的查询来检查用户是否有权创建新数据库。
现在我必须通过 Azure SQL 数据库实现同样的事情。那么我必须将什么卷分配给用户/服务器,以便我允许创建新数据库。我需要使用什么查询来检查用户是否具有创建者权限。
要创建数据库,用户登录必须是以下之一 校长:
- 服务器级主体登录
- 本地 Azure SQL Server 的 Azure AD 管理员
- 作为 dbmanager 数据库角色成员的登录名
对于
dbmanager
角色成员资格,用户需要服务器级别登录、主数据库用户以及 dbmanager
数据库角色成员资格。
授予现有登录权限以在
master
数据库上下文中创建数据库的示例:
CREATE USER YourDbCreatorUser;
ALTER ROLE dbmanager ADD MEMBER YourDbCreatorUser;
检查当前用户的
dbmanager
数据库角色成员身份(在 master
数据库上下文中):
SELECT IS_MEMBER('dbmanager') IS_DBMANAGER;
要通过
CREATE DATABASE
角色成员资格或其他方式(例如管理员)检查当前用户是否具有 dbmanager
权限,请使用以下方法之一:
SELECT HAS_PERMS_BY_NAME(NULL, NULL, 'CREATE ANY DATABASE') AS HasCreateDatabasePermissions;
SELECT COALESCE((SELECT 1
FROM fn_my_permissions ( NULL, 'SERVER' )
WHERE permission_name = 'CREATE ANY DATABASE'), 0) AS HasCreateDatabasePermissions;
您可以利用 dbmanager 和 loginmanager 角色向用户授予 权限 以创建新数据库。使用服务器管理员连接到主数据库并运行下面的命令为用户添加角色:
ALTER ROLE dbmanager ADD MEMBER <user>;
ALTER ROLE loginmanager ADD MEMBER <user>;
使用用户连接到主数据库并
create database <dbName>
创建表。运行成功如下图:
数据库创建成功如下图:
欲了解更多信息,您可以参考这个。