Opis podmiotów zabezpieczeń

Ukończone 100 pkt.

Podmioty zabezpieczeń to jednostki, które mogą żądać SQL Server zasobów i do których można (zwykle) udzielić uprawnień. Istnieje kilka zestawów podmiotów zabezpieczeń w SQL Server. Podmioty zabezpieczeń istnieją na poziomie serwera lub na poziomie bazy danych i mogą być osobami fizycznymi lub kolekcjami. Niektóre zestawy mają członkostwo kontrolowane przez administratorów SQL Server, a niektóre mają stałe członkostwo.

Na poziomie bazy danych przyjrzymy się użytkownikom, rolam bazy danych, rolam aplikacji.

Uwaga

Nowe identyfikatory logowania można dodać przez administratorów w usłudze Azure SQL Database, ale nie można utworzyć nowych ról serwera.

Schematy i zabezpieczane

Zanim przyjrzymy się szczegółom podmiotów zabezpieczeń, musimy zrozumieć koncepcje zabezpieczania i schematów. SQL Server i Azure SQL Database mają trzy zakresy zabezpieczania. Zabezpieczane są zasobami w bazie danych, do których system autoryzacji zarządza dostępem. Na przykład tabela jest zabezpieczana. Aby uprościć kontrolę dostępu, SQL Server zawiera zabezpieczenia w zagnieżdżonych hierarchiach nazywanych zakresami. Trzy zabezpieczane zakresy to serwer, baza danych i schemat. Schemat to kolekcja obiektów w bazie danych, która umożliwia grupowanie obiektów w oddzielnych przestrzeniach nazw.

Każdy użytkownik ma schemat domyślny. Jeśli użytkownik próbuje uzyskać dostęp do obiektu bez określenia nazwy schematu, tak jak w: SELECT name FROM customers, zakłada się, że obiekt znajduje się w domyślnym schemacie użytkownika. Jeśli w schemacie domyślnym nie ma takiego obiektu, SQL Server sprawdzi, czy obiekt znajduje się w wstępnie zdefiniowanym schemacie dbo. Jeśli nie ma obiektu określonej nazwy w domyślnym schemacie użytkownika lub w schemacie dbo, użytkownik otrzyma komunikat o błędzie. Najlepszym rozwiązaniem jest zawsze określenie nazwy schematu podczas uzyskiwania dostępu do obiektów, więc poprzednie zaznaczenie będzie wyglądać następująco: SELECT name FROM SalesSchema.customers. Jeśli użytkownik nie otrzymał domyślnego schematu, jego domyślny schemat jest ustawiony na dbo.

Domyślnie, jeśli żaden schemat nie zostanie określony podczas tworzenia obiektu przez użytkownika, SQL Server podejmie próbę utworzenia go w domyślnym schemacie użytkownika. Jeśli użytkownik nie otrzymał uprawnień do tworzenia obiektów w domyślnym schemacie, nie można utworzyć obiektu.

Nazwy logowania i użytkownicy

Niezależnie od używanego trybu uwierzytelniania nazwa logowania używana do uzyskiwania dostępu do bazy danych SQL jest skonfigurowana jako identyfikator logowania w wystąpieniu. Te identyfikatory logowania są konfigurowane na poziomie wystąpienia SQL Server i przechowywane w bazie danych master. Można jednak skonfigurować zawartych użytkowników, którzy są dodawani na poziomie bazy danych. Tych użytkowników można skonfigurować jako użytkowników uwierzytelniania SQL Server, a także użytkowników uwierzytelniania systemu Windows lub użytkowników usługi Azure Active Directory (w zależności od używanej platformy). Aby utworzyć tych użytkowników, baza danych musi być skonfigurowana pod kątem częściowego zawierania, który jest domyślnie skonfigurowany w usłudze Azure SQL Database i opcjonalnie konfigurowalny w SQL Server.

Ci użytkownicy mają dostęp tylko do bazy danych skonfigurowanej przez użytkownika. Dla celów Azure SQL Database jest to najlepsze rozwiązanie do tworzenia użytkowników w zakresie bazy danych użytkowników, a nie w bazie danych master, jak pokazano poniżej.

SQL
CREATE USER [dba@contoso.com] FROM EXTERNAL PROVIDER;
GO

Instrukcja CREATE USER jest wykonywana w kontekście bazy danych użytkownika. W powyższym przykładzie użytkownik jest użytkownikiem usługi Azure Active Directory, zgodnie ze składnią FROM EXTERNAL PROVIDER .

Jeśli identyfikatory logowania są tworzone na poziomie wystąpienia w SQL Server, użytkownik powinien zostać utworzony w bazie danych, która mapuje użytkownika na logowanie oparte na serwerze, jak pokazano w poniższym przykładzie.

SQL
USE [master]
GO

CREATE LOGIN demo WITH PASSWORD = 'Pa55.w.rd'
GO

USE [WideWorldImporters]
GO

CREATE USER demo FROM LOGIN demo
GO

Identyfikator logowania jest najpierw tworzony w bazie danych master, a następnie w bazie danych WideWorldImporters tworzony jest użytkownik do mapowania na tego użytkownika. Identyfikatory logowania są używane do uzyskiwania dostępu do SQL Server lub bazy danych Azure SQL, ale aby wykonać dowolną pracę w bazie danych, identyfikator logowania musi zostać zamapowany na nazwę użytkownika. Nazwa użytkownika jest używana do całego uwierzytelniania.

Identyfikatory logowania i nazwy użytkownika są najważniejszymi podmiotami zabezpieczeń, o których musisz pamiętać, ale w następnych sekcjach opisano niektóre z innych pojęć i terminów podczas czynienia z autoryzacją.

Role bazy danych

Jak można sobie wyobrazić, zabezpieczenia bazy danych mogą być skomplikowane dla aplikacji z wieloma użytkownikami. Aby ułatwić zarówno administratorom, jak i audytorom, większość aplikacji baz danych korzysta z zabezpieczeń opartych na rolach. Role są skutecznie grupami zabezpieczeń, które współdzielą wspólny zestaw uprawnień. Łączenie uprawnień z rolą umożliwia utworzenie zestawu ról dla danej aplikacji. Niektóre przykłady ról to administratorzy, którzy mieli pełny dostęp do wszystkich baz danych i serwerów, raportowania użytkowników, którzy tylko odczytują bazę danych, oraz konta aplikacji, które miały dostęp do zapisu danych w bazie danych. Role można zdefiniować, gdy aplikacja jest zaprojektowana, a następnie użytkownicy mogą być przypisywani do tych ról, ponieważ potrzebują dostępu do bazy danych. Kontrola dostępu oparta na rolach jest wspólną architekturą w systemach komputerowych i sposobem zarządzania autoryzacją w usłudze Azure Resource Manager.

SQL Server i Azure SQL Database obejmują wbudowane role zdefiniowane przez firmę Microsoft, a także opcję tworzenia ról niestandardowych. Role niestandardowe można tworzyć na poziomie serwera lub bazy danych. Jednak role serwera nie mogą mieć bezpośredniego dostępu do obiektów w bazie danych. Role serwera są dostępne tylko w SQL Server i Azure SQL Managed Instance, a nie w usłudze Azure SQL Database.

W bazie danych można udzielić uprawnień użytkownikom, którzy istnieją w bazie danych. Jeśli wszyscy użytkownicy potrzebują tych samych uprawnień, możesz utworzyć rolę bazy danych w bazie danych i udzielić wymaganych uprawnień do tej roli. Użytkownicy mogą być dodawani jako członkowie roli bazy danych. Członkowie roli bazy danych dziedziczą uprawnienia roli bazy danych.

SQL
CREATE USER [DP300User1] WITH PASSWORD = 'Pa55.w.rd'
GO

CREATE USER [DP300User2] WITH PASSWORD = 'Pa55.w.rd'
GO

CREATE ROLE [SalesReader]
GO

ALTER ROLE [SalesReader] ADD MEMBER [DP300User1]
GO

ALTER ROLE [SalesReader] ADD MEMBER [DP300User2]
GO

GRANT SELECT, EXECUTE ON SCHEMA::Sales TO [SalesReader]
GO

W powyższym przykładzie widać, że dwóch użytkowników zostało utworzonych, a następnie utworzono rolę o nazwie SalesReader. Dwóch nowych użytkowników zostanie dodanych do nowo utworzonej roli, a następnie na koniec zostanie udzielona SELECT rola i EXECUTE uprawnienia do schematu Sprzedaż . Każdy użytkownik, który jest w tej roli, może wybrać dowolny obiekt w schemacie Sales i wykonać dowolną procedurę składowaną w schemacie.

Role aplikacji

Role aplikacji można również tworzyć w bazie danych SQL Server lub w bazie danych Azure SQL. W przeciwieństwie do ról bazy danych użytkownicy nie są członkami roli aplikacji. Rola aplikacji jest aktywowana przez użytkownika, podając wstępnie skonfigurowane hasło dla roli aplikacji. Po aktywowaniu roli uprawnienia stosowane do roli aplikacji zostaną zastosowane do użytkownika do momentu dezaktywowania tej roli.

Wbudowane role bazy danych

Microsoft SQL Server zawiera kilka stałych ról bazy danych w każdej bazie danych, dla których uprawnienia są wstępnie zdefiniowane. Użytkownicy mogą być dodawani jako członkowie co najmniej jednej roli. Te role zapewniają członkom wstępnie zdefiniowany zestaw uprawnień. Te role działają tak samo w Azure SQL Database i SQL Server.

Rola bazy danych Definicja
db_accessadmin Umożliwia użytkownikom tworzenie innych użytkowników w bazie danych. Ta rola nie udziela dostępu do schematu żadnej z tabel ani nie udziela dostępu do danych w bazie danych.
Db_backupoperator Umożliwia użytkownikom tworzenie kopii zapasowej bazy danych w SQL Server lub SQL Managed Instance. Rola db_backupoperator nie przyznaje żadnych uprawnień w bazie danych Azure SQL.
db_datareader Umożliwia użytkownikom odczytywanie z każdej tabeli i widoku w bazie danych.
db_datawriter Umożliwia użytkownikom wyświetlanie INSERTdanych UPDATEz każdej tabeli i DELETE widoku w bazie danych.
db_ddladmin Umożliwia użytkownikom tworzenie lub modyfikowanie obiektów w bazie danych. Członkowie tej roli mogą zmieniać definicję dowolnego obiektu, dowolnego typu, ale członkowie tej roli nie mają dostępu do odczytu ani zapisu żadnych danych w bazach danych.
Db_denydatareader Użytkownicy, którzy muszą uniemożliwić odczytywanie danych z dowolnego obiektu w bazie danych, gdy ci użytkownicy otrzymali prawa za pośrednictwem innych ról lub bezpośrednio.
Db_denydatawriter Użytkownicy, którzy muszą być uniemożliwieni zapisywania danych do dowolnego obiektu w bazie danych, gdy ci użytkownicy otrzymali prawa za pośrednictwem innych ról lub bezpośrednio.
db_securityadmin Użytkownicy, którzy muszą mieć możliwość udzielenia dostępu innym użytkownikom w bazie danych. Członkowie tej roli nie mają dostępu do danych w bazie danych; jednak członkowie tej roli mogą przyznać sobie dostęp do tabel w bazie danych. Członkostwo w tej roli bazy danych powinno być ograniczone tylko do zaufanych użytkowników.
db_owner Użytkownicy, którzy potrzebują dostępu administracyjnego do bazy danych. Członkowie tej roli mogą domyślnie wykonywać dowolną akcję w bazie danych. Jednak w przeciwieństwie do rzeczywistego właściciela bazy danych, który ma dbo nazwy użytkownika, użytkownicy w db_owner roli mogą mieć zablokowany dostęp do danych, umieszczając je w innych rolach bazy danych, takich jak db_denydatareader, lub odmawiając im dostępu do obiektów. Członkostwo w tej roli bazy danych powinno być ograniczone tylko do zaufanych użytkowników.

Wszyscy użytkownicy w bazie danych są automatycznie członkami public roli. Domyślnie ta rola nie ma uprawnień przyznanych. Uprawnienia można przyznać roli publicznej, ale należy dokładnie rozważyć, czy jest to naprawdę coś, co chcesz zrobić. Przyznanie uprawnień do roli publicznej spowoduje przyznanie tych uprawnień każdemu użytkownikowi, w tym kontu gościa, jeśli konto gościa zostało włączone.

Wbudowane role bazy danych spełniają potrzeby wielu aplikacji; jednak w przypadku aplikacji, które wymagają bardziej szczegółowych zabezpieczeń (na przykład gdy chcesz udzielić dostępu tylko do określonego podzestawu tabel), rola niestandardowa jest często lepszym wyborem.

Uwaga

Domyślnie użytkownicy w rolach takich jak db_owner zawsze widzą wszystkie dane w bazie danych. Aplikacje mogą korzystać z opcji szyfrowania, takich jak Always Encrypted, aby chronić poufne dane przed uprzywilejowanymi użytkownikami.

Azure SQL Baza danych ma dwie role zdefiniowane w bazie danych master serwera Azure SQL.

Rola bazy danych Definicja
Dbmanager Umożliwia członkom tworzenie dodatkowych baz danych w środowisku bazy danych Azure SQL. Ta rola jest odpowiednikiem stałej dbcreator roli serwera w lokalnej SQL Server firmy Microsoft.
Loginmanager Umożliwia członkom tworzenie dodatkowych identyfikatorów logowania na poziomie serwera. Ta rola jest odpowiednikiem stałej securityadmin roli serwera w lokalnej SQL Server firmy Microsoft.

Naprawiono role serwera

Oprócz ról bazy danych SQL Server i Azure SQL Managed Instance zapewniają kilka stałych ról serwera. Te role przypisują uprawnienia w zakresie całego serwera. Podmioty zabezpieczeń na poziomie serwera, które obejmują identyfikatory logowania SQL Server, konta systemu Windows i grupę systemu Windows, można dodać do stałych ról serwera. Uprawnienia dla stałych ról serwera są wstępnie zdefiniowane i nie można dodać żadnych nowych ról serwera. Stałe role serwera to:

Naprawiono rolę serwera Definicja
sysadmin Umożliwia członkom wykonywanie wszelkich działań na serwerze.
Serveradmin Umożliwia członkom zmianę ustawień konfiguracji dla całego serwera (na przykład Maksymalna pamięć serwera) i wyłączenie serwera.
Securityadmin Umożliwia członkom zarządzanie identyfikatorami logowania i ich właściwościami (na przykład zmianą hasła logowania). Członkowie mogą również przyznać i odwołać uprawnienia na poziomie serwera i bazy danych. Ta rola powinna być traktowana jako równoważna roli administratora systemu.
Processadmin Umożliwia członkom zabicie procesów działających wewnątrz SQL Server.
Setupadmin Umożliwia członkom dodawanie i usuwanie połączonych serwerów przy użyciu języka T-SQL.
Bulkadmin Umożliwia członkom uruchamianie instrukcji BULK INSERT języka T-SQL.
Diskadmin Umożliwia członkom zarządzanie urządzeniami kopii zapasowych w SQL Server.
Dbcreator Umożliwia członkom tworzenie, przywracanie, zmienianie i usuwanie dowolnej bazy danych.
public Każde logowanie SQL Server należy do roli użytkownika publicznego. W przeciwieństwie do innych stałych ról serwera uprawnienia można przyznać, odmówić lub odwołać z roli publicznej.

Następna lekcja: Opisywanie uprawnień do bazy danych i obiektu

Kontynuuj