Я автоматизирую создание входа в систему в базе данных SQL Server 2008, используя SMO в VB.NET.Я создал логин, создал пользователя в базе данных, назначил роли пользователя и установил логин пользователя на логин, который я создал на уровне сервера.
То, что я не смогсделать это правильно настроить сопоставление пользователей.Но, может быть, я что-то неправильно понимаю.Я ни в коем случае не гуру SQL Security.
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перейдите на страницу SERVER> Security> Logins> «Domain \ TestGroup»> User Mappings, строка в списке для PermissionTestDB не проверена.В приведенной ниже таблице видно, что для имени входа и связанного с ним пользователя включены роли db_datareader и db_datawriter, но все они неактивны.
Я поступаю неправильно?Класс DatabaseMapping не имеет обширной документации, поэтому любая помощь будет принята с благодарностью.