用户无法连接到 Azure SQL 实例
User can't connect to Azure SQL Instance
我在 Azure 上创建了我的第一个数据库(我们称它为 MyDB)并创建了一个用户,我想用它从我的应用程序查询数据库。我只想给那个用户 db_datawriter
和 db_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
您创建的 USER
和 LOGIN
。首先连接到 MyDB
和 DROP
用户:
DROP USER MyDBUser;
然后连接到 master
和 DROP
LOGIN
:
DROP LOGIN MyDBUser;
现在再次连接到 MyDB
并 CREATE
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;
我在 Azure 上创建了我的第一个数据库(我们称它为 MyDB)并创建了一个用户,我想用它从我的应用程序查询数据库。我只想给那个用户 db_datawriter
和 db_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
您创建的 USER
和 LOGIN
。首先连接到 MyDB
和 DROP
用户:
DROP USER MyDBUser;
然后连接到 master
和 DROP
LOGIN
:
DROP LOGIN MyDBUser;
现在再次连接到 MyDB
并 CREATE
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;