用户无法连接到 Azure SQL 实例

User can't connect to Azure SQL Instance

我在 Azure 上创建了我的第一个数据库(我们称它为 MyDB)并创建了一个用户,我想用它从我的应用程序查询数据库。我只想给那个用户 db_datawriterdb_datareader 因为我认为这就是这个用户需要从应用程序中做的所有事情。

当我在 MyDB 上 运行 时:

SELECT DP1.name AS DatabaseRoleName,   
   isnull (DP2.name, 'No members') AS DatabaseUserName   
 FROM sys.database_role_members AS DRM  
 RIGHT OUTER JOIN sys.database_principals AS DP1  
   ON DRM.role_principal_id = DP1.principal_id  
 LEFT OUTER JOIN sys.database_principals AS DP2  
   ON DRM.member_principal_id = DP2.principal_id  
WHERE DP1.type = 'R'
ORDER BY DP1.name;  

我回来了:

db_accessadmin      No members
db_backupoperator   No members
db_datareader       MyDBUser
db_datawriter       MyDBUser
db_ddladmin         No members
db_denydatareader   No members
db_denydatawriter   No members
db_owner            dbo
db_securityadmin    No members
public              No members

所以这似乎奏效了。问题是 - 首先我还必须授予该用户连接到数据库的权限,因为当我尝试连接到服务器时,我得到这个:

===================================

Cannot connect to abc.database.windows.net.

===================================

The server principal "MyDBUser" is not able to access the database "master" under the current security context.
Cannot open user default database. Login failed.
Login failed for user 'MyDBUser'. (.Net SqlClient Data Provider)

我想这可能是因为我的新用户无法连接到主数据库,正如错误消息所提示的那样。但是,当我查看 MyDB 的属性时,dbo

为用户授予了“连接”

如何让我的用户连接到 Azure 数据库实例,最好是权限越少越好,我只想让他在 MyDB[=19= 上进行 select、更新、插入等操作]

我尝试使用此命令更改默认数据库,因此我不需要在 masterDB 上执行任何操作,但未找到存储过程:

Exec sp_defaultdb @loginame='MyDBUser', @defdb='MyDB' 

编辑:这就是我在 SSMS 中创建登录名/用户的方式

第一(实例):

CREATE LOGIN MyDBUser
    WITH PASSWORD = '******' 
GO

然后(在 MyDB 上):

CREATE USER MyDBUser
    FOR LOGIN MyDBUser
    WITH DEFAULT_SCHEMA = dbo
GO

-- Add user to the database owner role
EXEC sp_addrolemember N'db_datawriter', N'MyDBUser'
GO

我在使用 SSMS 连接到 Azure SQL DB 时收到了类似的错误消息。那里的解决方案是识别数据库,因此消息“访问数据库“master””。您可能已经输入了数据库服务器名称。

你没有提到你是如何尝试连接到数据库的,但是如果是 SSMS,请在“连接属性”选项卡上输入数据库的名称(在“选项>>>”按钮后面可用“连接到服务器”屏幕)。

您已经创建了一个 LOGIN,然后为 LOGIN 创建了一个 USER,但只在您希望它们连接到的数据库中,但 没有master.

SQL Azure Databases 是包含的数据库,因此无需创建 LOGIN;数据库使用自己的范围凭据。

首先 DROP 您创建的 USERLOGIN。首先连接到 MyDBDROP 用户:

DROP USER MyDBUser;

然后连接到 masterDROP LOGIN:

DROP LOGIN MyDBUser;

现在再次连接到 MyDBCREATE USER 使用所需的凭据:

CREATE USER MyDBUser WITH PASSWORD = N'Your Secure Password', DEFAULT_SCHEMA = N'dbo';

然后你可以给它所需的数据库角色。 不要 使用sp_addrolemember;它已被弃用约 10 年。

ALTER ROLE db_datareader ADD MEMBER MyDBUser;
ALTER ROLE db_datawriter ADD MEMBER MyDBUser;