Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 通过SMO在SQL server 2008中添加登录名。如何正确创建用户映射?_.net_Security_Sql Server 2008_Smo - Fatal编程技术网

.net 通过SMO在SQL server 2008中添加登录名。如何正确创建用户映射?

.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

我正在使用VB.NET中的SMO在SQL Server 2008数据库上自动创建登录。我已经创建了登录名,在数据库中创建了用户,指定了用户角色,并将用户的登录名设置为我在服务器级别创建的登录名

我所不能做的是正确地获取用户映射。但也许我误解了什么。无论如何,我都不是SQL安全专家

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'