Bagikan melalui


Mengelola Pengguna, Peran, dan Login

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance Azure Synapse Analytics

Di SMO, login diwakili oleh Login objek . Ketika log masuk ada di SQL Server, log masuk dapat ditambahkan ke peran server. Peran server diwakili oleh ServerRole objek . Peran database diwakili oleh DatabaseRole objek dan peran aplikasi diwakili oleh ApplicationRole objek .

Hak istimewa yang terkait dengan tingkat server tercantum sebagai properti ServerPermission objek. Hak istimewa tingkat server dapat diberikan kepada, ditolak, atau dicabut dari akun masuk individual.

Setiap Database objek memiliki UserCollection objek yang menentukan semua pengguna dalam database. Setiap pengguna dikaitkan dengan log masuk. Satu masuk dapat dikaitkan dengan pengguna dalam lebih dari satu database. Metode Login objek EnumDatabaseMappings dapat digunakan untuk mencantumkan semua pengguna di setiap database yang terkait dengan masuk. Atau, User properti objek Login menentukan log masuk yang terkait dengan pengguna.

Database SQL Server juga memiliki peran yang menentukan sekumpulan hak istimewa tingkat database yang memungkinkan pengguna melakukan tugas tertentu. Tidak seperti peran server, peran database tidak diperbaiki. Mereka dapat dibuat, dimodifikasi, dan dihapus. Hak istimewa dan pengguna dapat ditetapkan ke peran database untuk administrasi massal.

Contoh

Untuk contoh kode berikut, Anda harus memilih lingkungan pemrograman, templat pemrograman, dan bahasa pemrograman untuk membuat aplikasi Anda. Untuk informasi selengkapnya, lihat Membuat Proyek SMO Visual C# di Visual Studio .NET.

Menghitung Login dan Pengguna Terkait di Visual C#

Setiap pengguna dalam database dikaitkan dengan log masuk. Log masuk dapat dikaitkan dengan pengguna dalam lebih dari satu database. Contoh kode menunjukkan cara memanggil EnumDatabaseMappings metode Login objek untuk mencantumkan semua pengguna database yang terkait dengan masuk. Contoh membuat masuk dan pengguna di database AdventureWorks2022 untuk memastikan ada informasi pemetaan untuk menghitung.

{   
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(" ");   
   }   
}   
}  

Menghitung Login dan Pengguna Terkait di PowerShell

Setiap pengguna dalam database dikaitkan dengan log masuk. Log masuk dapat dikaitkan dengan pengguna dalam lebih dari satu database. Contoh kode menunjukkan cara memanggil EnumDatabaseMappings metode Login objek untuk mencantumkan semua pengguna database yang terkait dengan masuk. Contoh membuat masuk dan pengguna di database AdventureWorks2022 untuk memastikan ada informasi pemetaan untuk menghitung.

# 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]
     }
   }
 }

Mengelola Peran dan Pengguna

Sampel ini menunjukkan cara mengelola peran dan pengguna. Untuk menjalankan sampel ini, Anda harus mereferensikan rakitan berikut:

  • 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(" ");  
   }  
}