gpt4 book ai didi

sql-server - 用户无法连接到 Azure SQL 实例

转载 作者:行者123 更新时间:2023-12-03 07:08:26 26 4
gpt4 key购买 nike

我在 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 为用户授予了“Connect”

如何让我的用户连接到 Azure 数据库实例,最好使用尽可能少的权限,我只希望他在 MyDB 上选择、更新、插入等

我尝试使用此命令更改默认数据库,因此我不需要在 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

最佳答案

您已经创建了一个LOGIN,然后为LOGIN创建了一个USER,但仅在您希望它们连接到的数据库中,但是< em>不在master中。

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

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

DROP USER MyDBUser;

然后连接到masterDROPLOGIN:

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;

关于sql-server - 用户无法连接到 Azure SQL 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70969733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com