请看图片。我使用以下代码附加数据库。
Dim conn As New SqlConnection("Server=MyHomeServer\SQLExpress;Database=master;Integrated Security=SSPI")
Dim cmd As New SqlCommand("", conn)
cmd.CommandText = "CREATE DATABASE dbNoPWD ON ( FILENAME = 'd:\dbNoPWD.mdf' ), ( FILENAME = 'd:\dbNoPWD_log.ldf' ) FOR ATTACH"
conn.Open()
cmd.ExecuteNonQuery()
cmd.Dispose()
conn.Dispose()
请注意我不想提供任何用户名和密码。
当我运行上面的代码然后检查SSMS时,我发现我的附加数据库未在角色中检查(请参见图片。)
这个问题是我的网络计算机无法访问此数据库。我想运行一些像上面这样的代码(没有sa密码),并且希望我的所有网络计算机都可以访问数据库而不需要我的用户参与设置SSMS。
答案 0 :(得分:0)
在创建数据库时的连接字符串中,您使用的是Windows身份验证。因此,如果您的ActiveDirector帐户是JOE,那么dbNoPWD数据库的所有者将是JOE,而不是SA。这就是为什么你的屏幕截图显示没有映射到dbNoPWD的SA的原因。
但问题在于:SA的映射与其他SqlServer登录是否能够访问您的数据库无关(除非它们属于sysadmin服务器角色)。每个SQLServer登录必须拥有它自己的新数据库映射,否则他们将无法使用它。
所以,让我们解决你的问题。如果您希望人们对您的新数据库具有读/写访问权限,请在数据库创建语句之后添加一些TSQL,以将用户映射到新数据库。像这样:
use dbNoPWD
go
exec sp_addrolemember db_datareader, SQLLOGINNAME
go
exec sp_addrolemember db_datawriter, SQLLOGINNAME
go
如果您有很多用户可以更轻松地为整个Windows组创建登录,然后只需将整个组的映射分配给您的数据库。