有没有办法在 Azure PaaS 数据库中创建第二个登录名(用户)?

Is there a way to create a second login (with user) in the Azure PaaS database?

我们已将数据库从物理服务器移至 Azure PaaS SQL 数据库。应用程序使用服务器登录名连接到数据库。我需要创建另一个对数据库具有只读访问权限的登录帐户。有人可以帮忙吗?

我已经尝试过的东西。

CREATE LOGIN login123
WITH PASSWORD = ******* 

CREATE USER login123 
FOR LOGIN login123
WITH DEFAULT_SCHEMA = dbo

ALTER ROLE db_datareader ADD MEMBER login123

以上已成功执行,但当应用程序使用此登录名时,出现以下错误。 "The server pricipal "login123" 在当前安全上下文下无法访问数据库 "master"。无法打开用户默认数据库。登录失败。"

使用 Azure-Sql-database 您不能使用 sql 服务器登录连接到 master 数据库 您必须将要访问的数据库放入连接字符串中。

您可以找到有关此 link 的更多信息: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-manage-logins#non-administrator-users

当你运行这个查询时:

CREATE LOGIN login123
WITH PASSWORD = ******* 

CREATE USER login123 
FOR LOGIN login123
WITH DEFAULT_SCHEMA = dbo

ALTER ROLE db_datareader ADD MEMBER login123

这意味着新用户只有数据库的只读权限。

查询运行在哪个数据库,只读权限是针对哪个数据库。

用户没有访问其他数据库或主数据库的权限。

详情请见:

  1. 控制和授予对 SQL 数据库和 SQL 的数据库访问权限 数据仓库
  2. Database-Level Roles

如果你想让一个用户都对多个数据库有只读权限,你应该在不同的数据库中创建多个用户(相同)。使用一个登录映射到更多用户。

这里是 T-SQL 代码,我测试过它可以在 Azure SQL 数据库中运行:

USE master
CREATE LOGIN login123
WITH PASSWORD = '****' 
GO
CREATE USER login123 
FOR LOGIN login123
WITH DEFAULT_SCHEMA = db_datareader
GO


USE Mydatabase  
CREATE USER login123 
FOR LOGIN login123
WITH DEFAULT_SCHEMA = dbo
GO
ALTER ROLE db_datareader ADD MEMBER login123
GO

``````

希望对您有所帮助。