【发布时间】:2019-03-08 20:57:53
【问题描述】:
我创建了一个 Sql Server 数据库(通过 Visual Studio),并在其中创建了一个用户。我赋予该用户 db_datareader 和 db_datawriter 角色的成员资格。
当我尝试打开连接时,出现以下异常。如果我将用户添加到 db_owner 角色,那么它可以工作。为什么? db_datareader 不应该足以打开连接吗?
System.Data.SqlClient.SqlException
HResult=0x80131904
Message=A connection was successfully established with the server, but then an error occurred during the login process. (provider: Named Pipes Provider, error: 0 - No process is on the other end of the pipe.)
Source=.Net SqlClient Data Provider
StackTrace:
at LicenseLibrary.Database.AzureDataAccess.<>c__DisplayClass15_0.<ExecuteAction>b__0() in C:\git\Store\LicenseLibrary\Database\AzureDataAccess.cs:line 150
Inner Exception 1:
Win32Exception: No process is on the other end of the pipe
更新: 我正在使用 VisualStudio 运行以创建数据库的许多 .sql 脚本来创建数据库。那些是(删除“GO”的行:
CREATE USER [readwrite] WITH PASSWORD = N'**************';
CREATE USER [readonly] WITH PASSWORD = N'************';
ALTER ROLE [db_datareader] ADD MEMBER [readonly];
ALTER ROLE [db_datareader] ADD MEMBER [readwrite];
ALTER ROLE [db_datawriter] ADD MEMBER [readwrite];
此外,在想要的角色上失败是一个奇怪的例外 - 说没有流程。
我在TestDatabaseRoles.zip 中有一个示例 - 3 行代码即可实现(也需要 zip 中的数据库)。
【问题讨论】:
-
没有理由需要 db_owner 来连接数据库。你能提供一个简化的复制品吗? stackoverflow.com/help/mcve
-
@DavidBrowne-Microsoft - 已更新。如果您需要任何其他信息,请告诉我。
-
我无法复制,即使在 localdb 实例上也是如此。你可以为连接代码添加一个repro吗?
-
@DavidBrowne-Microsoft - 我刚刚添加了一个示例链接。该示例只有 3 行代码。我认为您需要数据库才能看到它的发生,因此示例也有。谢谢你看这个!!!
标签: sql-server ado.net roles