【问题标题】:Azure SQL - Create User scoped to a single databaseAzure SQL - 创建范围为单个数据库的用户
【发布时间】:2020-08-06 12:33:55
【问题描述】:

我最初发布了this question on Super User。但是,这似乎不是正确的地方。

我有一个包含一个自定义数据库的 Azure SQL Server(我们称之为my_db)。到目前为止,我一直在使用我的服务器管理员凭据访问这个数据库。但是,我想让它更安全。为了做到这一点,我想创建一个仅限于my_db 的登录名/用户。我尝试了以下方法:

master 数据库上,通过服务器管理员凭据

  • 使用CREATE LOGIN db_login WITH password 'somePassword'; 创建了登录

在我的其他数据库 (my_db) 上,使用服务器管理员凭据

  • 使用CREATE USER db_login_user FROM LOGIN db_login; 创建了一个用户
  • 通过以下语句授予读取、写入和所有者权限:
    • EXEC sp_addrolemember 'db_datareader', 'db_login_user'
    • EXEC sp_addrolemember 'db_datawriter', 'db_login_user'
    • EXEC sp_addrolmember 'db_owner', 'db_login_user'

我现在正尝试通过 Azure Data Studio 登录。但是,我得到以下结果:

使用db_login_user

用户“db_login_user”登录失败。

使用db_login

服务器主体“db_login”无法在当前安全上下文下访问数据库“my_db”。无法打开登录请求的数据库“my_db”。登录失败。用户“db_login”登录失败。

我可以使用服务器管理员凭据成功访问数据库。然而,我再一次试图让这更安全。这个时候,我不明白为什么我无法使用新用户/登录名连接到数据库。另外,我不明白我是否应该尝试使用db_logindb_login_user 登录。

如何使用仅限于服务器上单个数据库的凭据创建用户?

谢谢!

【问题讨论】:

标签: azure azure-sql-database


【解决方案1】:

您应该创建一个包含的数据库用户。

在包含的数据库用户模型中,主数据库中的登录名不存在。相反,身份验证过程发生在用户数据库中,并且用户数据库中的数据库用户在主数据库中没有关联的登录。

这些概念记录在here

在您的情况下,您可以在 my_db 数据库上运行以下语句

CREATE USER db_login_user WITH PASSWORD = 'enterStrongPassword@1234';
GO

ALTER ROLE db_datareader ADD MEMBER db_login_user;
ALTER ROLE db_datawriter ADD MEMBER db_login_user;
ALTER ROLE db_owner ADD MEMBER db_login_user;

【讨论】:

    【解决方案2】:

    您需要在两个数据库ma​​ster 和 my_db)上运行以下查询,然后尝试使用 login 'db_login'和您在创建登录时提供的密码。

    CREATE USER db_login_user FROM LOGIN db_login

    【讨论】:

    • 当我进入连接下的 Azure Data Studio 时,我在服务器下指定 FQN、身份验证类型(使用 AAD 和 MFA)和数据库名称。连接。如果您使用 SSMS 数据库引擎连接,选项...连接属性将允许您指定目标数据库名称。包含/单个用户是 MS 推荐的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    相关资源
    最近更新 更多