Udostępnij za pośrednictwem


Zarządzanie użytkownikami, role i logowania

W SMO, logowania są reprezentowane przez Login obiektu.Gdy istnieje logowanie w SQL Server, można dodać do roli serwera.Rola serwera jest reprezentowana przez ServerRole obiektu.rola bazy danych jest reprezentowana przez DatabaseRole obiektu i rola aplikacji jest reprezentowana przez ApplicationRole obiektu.

Uprawnienia skojarzone z poziom serwera są wyświetlane jako właściwości ServerPermission obiektu.Uprawnienia poziom serwera można przyznane, odmowa lub odwołany z logowania poszczególnych kont.

Każdy Database obiekt ma UserCollection obiekt, który określa wszystkich użytkowników w bazie danych.Każdy użytkownik jest skojarzony z logowania.Jednego logowania może być skojarzona z użytkownikami w więcej niż jednej bazy danych.Login Obiektu EnumDatabaseMappings Metoda może być używana, aby wyświetlić listę wszystkich użytkowników w każdej bazy danych, która jest skojarzona z logowania.Alternatywnie User obiektu Login właściwość określa logowania, która jest skojarzona z użytkownika.

SQL Server bazy danych ma również role, które określają zestaw uprawnień poziom bazy danych, które umożliwiają użytkownikowi wykonywanie określonych zadań.W przeciwieństwie do ról serwera nie są stałe role bazy danych.Mogą być utworzone, zmodyfikowane i usunięte.Przywileje i użytkowników można przypisać rola bazy danych dla administracji luzem.

Przykład

Na przykład następujący kod konieczne będzie wybierz środowisko programowania programowania szablonu i język programowania, aby utworzyć aplikację.Aby uzyskać więcej informacji, zobacz Jak Tworzenie projektu SMO Visual Basic w programie Visual Studio.NET i Jak Tworzenie projektu programu Visual C# SMO w programie Visual Studio.NET.

Wyliczanie logowania i skojarzone użytkowników języka Visual Basic

Każdy użytkownik w bazie danych jest skojarzony z logowania.Logowania może być skojarzona z użytkownikami w więcej niż jednej bazy danych.Przykład kodu pokazuje wywołania EnumDatabaseMappings metoda Login obiekt, aby wyświetlić listę wszystkich użytkowników bazy danych, które są skojarzone z logowania.Przykład tworzy logowania i użytkownika w AdventureWorks2008R2 bazy danych, aby upewnić się, że nie ma informacji o mapowaniu wyliczyć.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Iterate through each database and display.
Dim db As Database
For Each db In srv.Databases
    Console.WriteLine("============================================")
    Console.WriteLine("Login Mappings for the database: " + db.Name)
    Console.WriteLine(" ")
    'Run the EnumLoginMappings method and return details of database user-login mappings to a DataTable object variable.
    Dim d As DataTable
    d = db.EnumLoginMappings
    'Display the mapping information.
    Dim r As DataRow
    Dim c As DataColumn
    For Each r In d.Rows
        For Each c In r.Table.Columns
            Console.WriteLine(c.ColumnName + " = " + r(c))
        Next
        Console.WriteLine(" ")
    Next
Next

Wyliczanie logowania i skojarzone użytkowników w środowisku Visual C#

Każdy użytkownik w bazie danych jest skojarzony z logowania.Logowania może być skojarzona z użytkownikami w więcej niż jednej bazy danych.Przykład kodu pokazuje wywołania EnumDatabaseMappings metoda Login obiekt, aby wyświetlić listę wszystkich użytkowników bazy danych, które są skojarzone z logowania.Przykład tworzy logowania i użytkownika w AdventureWorks2008R2 bazy danych, aby upewnić się, że nie ma informacji o mapowaniu wyliczyć.

{ 
Server srv = new Server(); 
//Iterate through each database and display. 

foreach ( Database db in srv.Databases) { 
   Console.WriteLine("===================================="); 
   Console.WriteLine("Login Mappings for the database: " + db.Name); 
   Console.WriteLine(" "); 
   //Run the EnumLoginMappings method and return details of database user-login mappings to a DataTable object variable. 
   DataTable d;
   d = db.EnumLoginMappings(); 
   //Display the mapping information. 
   foreach (DataRow r in d.Rows) { 
      foreach (DataColumn c in r.Table.Columns) { 
         Console.WriteLine(c.ColumnName + " = " + r[c]); 
      } 
      Console.WriteLine(" "); 
   } 
} 
}

Wyliczanie logowania i użytkowników skojarzonych w PowerShell

Każdy użytkownik w bazie danych jest skojarzony z logowania.Logowania może być skojarzona z użytkownikami w więcej niż jednej bazy danych.Przykład kodu pokazuje wywołania EnumDatabaseMappings metoda Login obiekt, aby wyświetlić listę wszystkich użytkowników bazy danych, które są skojarzone z logowania.Przykład tworzy logowania i użytkownika w AdventureWorks2008R2 bazy danych, aby upewnić się, że nie ma informacji o mapowaniu wyliczyć.

# Set the path context to the local, default instance of SQL Server.
CD \sql\localhost\Default\Databases


#Iterate through all databases
 foreach ($db in Get-ChildItem)
 {
 "==============================================="
 "Login Mappings for the database: "+ $db.Name
 
 #get the datatable containing the mapping from the smo database oject
 $dt = $db.EnumLoginMappings()
 
 #display the results
 foreach($row in $dt.Rows)
     {
        foreach($col in $row.Table.Columns)
      {
        $col.ColumnName + "=" + $row[$col]
       }
 
     }
 }

Zarządzanie, role i użytkownicy

W przykładzie pokazano sposób zarządzania role i użytkownicy.Pierwsza próbka używa języka C#, Visual Basic w drugim.Próbki te należy odwołać następujące zespoły:

  • Microsoft.SqlServer.SMO.dll

  • Microsoft.SqlServer.Management.SDK.SFC.dll

  • Microsoft.SqlServer.ConnectionInfo.dll

  • Microsoft.SqlServer.SqlEnum.dll

using Microsoft.SqlServer.Management.Smo;
using System;

public class A {
   public static void Main() {
      Server svr = new Server();
      Database db = new Database(svr, "TESTDB");
      db.Create();

      // Creating Logins
      Login login = new Login(svr, "Login1");
      login.LoginType = LoginType.SqlLogin;
      login.Create("password@1");

      Login login2 = new Login(svr, "Login2");
      login2.LoginType = LoginType.SqlLogin;
      login2.Create("password@1");

      // Creating Users in the database for the logins created
      User user1 = new User(db, "User1");
      user1.Login = "Login1";
      user1.Create();

      User user2 = new User(db, "User2");
      user2.Login = "Login2";
      user2.Create();

      // Creating database permission Sets
      DatabasePermissionSet dbPermSet = new DatabasePermissionSet(DatabasePermission.AlterAnySchema);
      dbPermSet.Add(DatabasePermission.AlterAnyUser);

      DatabasePermissionSet dbPermSet2 = new DatabasePermissionSet(DatabasePermission.CreateType);
      dbPermSet2.Add(DatabasePermission.CreateSchema);
      dbPermSet2.Add(DatabasePermission.CreateTable);

      // Creating Database roles
      DatabaseRole role1 = new DatabaseRole(db, "Role1");
      role1.Create();

      DatabaseRole role2 = new DatabaseRole(db, "Role2");
      role2.Create();

      // Granting Database Permission Sets to Roles
      db.Grant(dbPermSet, role1.Name);
      db.Grant(dbPermSet2, role2.Name);

      // Adding members (Users / Roles) to Role
      role1.AddMember("User1");

      role2.AddMember("User2");

      // Role1 becomes a member of Role2
      role2.AddMember("Role1");

      // Enumerating through explicit permissions granted to Role1
      // enumerates all database permissions for the Grantee
      DatabasePermissionInfo[] dbPermsRole1 = db.EnumDatabasePermissions("Role1");   
      foreach (DatabasePermissionInfo dbp in dbPermsRole1) {
         Console.WriteLine(dbp.Grantee + " has " + dbp.PermissionType.ToString() + " permission.");
      }
      Console.WriteLine(" ");
   }
}

Jest to wersja języka Visual Basic:

Imports Microsoft.SqlServer.Management.Smo

Public Class A
   Public Shared Sub Main()
      Dim svr As New Server()
      Dim db As New Database(svr, "TESTDB")
      db.Create()

      ' Creating Logins
      Dim login As New Login(svr, "Login1")
      login.LoginType = LoginType.SqlLogin
      login.Create("password@1")

      Dim login2 As New Login(svr, "Login2")
      login2.LoginType = LoginType.SqlLogin
      login2.Create("password@1")

      ' Creating Users in the database for the logins created
      Dim user1 As New User(db, "User1")
      user1.Login = "Login1"
      user1.Create()

      Dim user2 As New User(db, "User2")
      user2.Login = "Login2"
      user2.Create()

      ' Creating database permission Sets
      Dim dbPermSet As New DatabasePermissionSet(DatabasePermission.AlterAnySchema)
      dbPermSet.Add(DatabasePermission.AlterAnyUser)

      Dim dbPermSet2 As New DatabasePermissionSet(DatabasePermission.CreateType)
      dbPermSet2.Add(DatabasePermission.CreateSchema)
      dbPermSet2.Add(DatabasePermission.CreateTable)

      ' Creating Database roles
      Dim role1 As New DatabaseRole(db, "Role1")
      role1.Create()

      Dim role2 As New DatabaseRole(db, "Role2")
      role2.Create()

      ' Granting Database Permission Sets to Roles
      db.Grant(dbPermSet, role1.Name)
      db.Grant(dbPermSet2, role2.Name)

      ' Adding members (Users / Roles) to Role
      role1.AddMember("User1")

      role2.AddMember("User2")

      ' Role1 becomes a member of Role2
      role2.AddMember("Role1")

      ' Enumerating through explicit permissions granted to Role1
      ' enumerates all database permissions for the Grantee
      Dim dbPermsRole1 As DatabasePermissionInfo() = db.EnumDatabasePermissions("Role1")
      For Each dbp As DatabasePermissionInfo In dbPermsRole1
         Console.WriteLine(dbp.Grantee + " has " & dbp.PermissionType.ToString() & " permission.")
      Next
      Console.WriteLine(" ")
   End Sub
End Class