Добавление логинов в SQL Server 2008 через SMO. Как правильно создавать сопоставления пользователей? - PullRequest
1 голос
/ 05 августа 2011

Я автоматизирую создание входа в систему в базе данных 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 не имеет обширной документации, поэтому любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 05 августа 2011
sp_revokedbaccess 'username'
sp_adduser 'username'
sp_addrolemember 'role', 'username'
...