.net 通过SMO在SQL server 2008中添加登录名。如何正确创建用户映射?
我正在使用VB.NET中的SMO在SQL Server 2008数据库上自动创建登录。我已经创建了登录名,在数据库中创建了用户,指定了用户角色,并将用户的登录名设置为我在服务器级别创建的登录名 我所不能做的是正确地获取用户映射。但也许我误解了什么。无论如何,我都不是SQL安全专家.net 通过SMO在SQL server 2008中添加登录名。如何正确创建用户映射?,.net,security,sql-server-2008,smo,.net,Security,Sql Server 2008,Smo,我正在使用VB.NET中的SMO在SQL Server 2008数据库上自动创建登录。我已经创建了登录名,在数据库中创建了用户,指定了用户角色,并将用户的登录名设置为我在服务器级别创建的登录名 我所不能做的是正确地获取用户映射。但也许我误解了什么。无论如何,我都不是SQL安全专家 Sub Main() Dim TargetServerName As String = "MyServer" Dim TargetDBName As String = "PermissionTestDB
Sub Main()
Dim TargetServerName As String = "MyServer"
Dim TargetDBName As String = "PermissionTestDB"
Dim strGroupName As String = "TestGroup"
Dim TargetServer As New Server(TargetServerName)
Dim TargetDataBase As Database = TargetServer.Databases(TargetDBName)
' First we will create a SQL Server Login
Dim newLogin As New Login(TargetServer, String.Format("DOMAIN\{0}", strGroupName))
newLogin.LoginType = LoginType.WindowsGroup
newLogin.Create()
'Next we will create a Database User login
Dim dbLogin As New User(TargetDataBase, newLogin.Name)
TargetDataBase.Users.Add(dbLogin)
dbLogin.Login = newLogin.Name
newLogin.DefaultDatabase = TargetDBName
'Assign the Database Login some roles
Dim DataReaderServerRole As DatabaseRole = TargetDataBase.Roles("db_datareader")
Dim DataWriterServerRole As DatabaseRole = TargetDataBase.Roles("db_datawriter")
DataReaderServerRole.AddMember(dbLogin.Name)
DataWriterServerRole.AddMember(dbLogin.Name)
'And Add a permission under the dbo schema
Dim dboPermission As New ObjectPermissionSet(ObjectPermission.Alter)
TargetDataBase.Schemas("dbo").Grant(dboPermission, newLogin.Name)
'Map the Database User to the Server login
Dim dbMapping As New DatabaseMapping(newLogin.Name, TargetDBName, dbLogin.Name)
End Sub
最后一行创建了一个映射,我在另一个子模块中调用了EnumDatabaseMappings方法,映射就在那里,但是当我进入Management Studio并进入服务器>安全>登录>用户映射页面“域\测试组”>时,PermissionTestDB列表中的行没有被选中。在下面的网格中,我可以看到登录名和关联用户启用了db_datareader和db_datawriter角色,但都是灰色的
我走错方向了吗?DatabaseMapping类没有非常广泛的文档,因此非常感谢您的帮助。这对我来说不太合适。执行sp_adduser时,我不断返回“不是有效的登录名,或者您没有权限”。尽管该登录名是在服务器级别创建的,并且具有权限。我可以在Management Studio中创建用户,没有问题,与上面的VB.NET SMO过程相同。您是否先使用了targetdatabase?我没有,但在这样做之后,它返回了相同的内容。Hmmm。我只在以sa身份登录时运行过此功能。您可以试试。Microsoft在sp_adduser页面上说:“此功能将在未来版本的Microsoft SQL Server中删除……请改用CREATE USER。”因此,我将采用这种方式。谢谢你的想法。有时候,一个人的注意力太狭隘,以至于他们看不到更简单(并且经过时间证明)的做事方式。这对我来说是行不通的。执行sp_adduser时,我不断返回“不是有效的登录名,或者您没有权限”。尽管该登录名是在服务器级别创建的,并且具有权限。我可以在Management Studio中创建用户,没有问题,与上面的VB.NET SMO过程相同。您是否先使用了targetdatabase?我没有,但在这样做之后,它返回了相同的内容。Hmmm。我只在以sa身份登录时运行过此功能。您可以试试。Microsoft在sp_adduser页面上说:“此功能将在未来版本的Microsoft SQL Server中删除……请改用CREATE USER。”因此,我将采用这种方式。谢谢你的想法。有时,一个人的注意力过于狭隘,以至于忽略了更简单的(经过时间证明的)做事方式。
sp_revokedbaccess 'username'
sp_adduser 'username'
sp_addrolemember 'role', 'username'