Ćwiczenie — Określanie, kto może uzyskać dostęp do bazy danych

Ukończone

Mimo że możesz nawiązać połączenie z bazą danych za pośrednictwem sieci, co nie oznacza, że faktycznie możesz uzyskać dostęp do samych danych. Zgodnie z podejściem warstwowym chcesz mieć pewność, że tylko użytkownicy, którzy potrzebują dostępu do danych, mogą uzyskać do niego dostęp. Ten dostęp polega na tym, że uwierzytelnianie i autoryzacja są odtwarzane.

Uwierzytelnianie

Uwierzytelnianie to proces weryfikacji tożsamości. Ta tożsamość może być użytkownikiem, usługą działającą w systemie lub samym systemem, na przykład maszyną wirtualną. Dzięki procesowi uwierzytelniania upewnij się, że osoba lub system jest tym, kim się podaje. Usługa SQL Database obsługuje dwa typy uwierzytelniania: uwierzytelnianie SQL i uwierzytelnianie firmy Microsoft Entra.

Uwierzytelnianie SQL

Metoda uwierzytelniania SQL używa nazwy użytkownika i hasła. Konta użytkowników można utworzyć w głównej bazie danych i można przyznać uprawnienia we wszystkich bazach danych na serwerze. Możesz również utworzyć użytkowników w samej bazie danych, nazywanych zawartymi użytkownikami i przyznać im dostęp tylko do tej bazy danych. Podczas tworzenia serwera logicznego dla bazy danych określono logowanie administratora serwera przy użyciu nazwy użytkownika i hasła. Korzystając z tych poświadczeń, możesz uwierzytelnić się w dowolnej bazie danych na tym serwerze jako właściciel bazy danych lub dbo.

Uwierzytelnianie Microsoft Entra

Ta metoda uwierzytelniania używa tożsamości zarządzanych przez identyfikator entra firmy Microsoft i jest obsługiwana w przypadku domen zarządzanych i zintegrowanych. Zawsze, gdy jest to możliwe, użyj uwierzytelniania entra firmy Microsoft (zintegrowanego zabezpieczeń). Dzięki uwierzytelnieniu firmy Microsoft Entra można zarządzać tożsamościami użytkowników bazy danych i innymi usługi firmy Microsoft w jednej centralnej lokalizacji. Centralne zarządzanie tożsamościami oznacza jedną lokalizację do zarządzania użytkownikami bazy danych i prostsze zarządzanie uprawnieniami. Jeśli chcesz użyć uwierzytelniania firmy Microsoft Entra, musisz utworzyć innego administratora serwera o nazwie Administrator firmy Microsoft Entra, który może administrować użytkownikami i grupami firmy Microsoft Entra. Ten administrator może również wykonywać wszystkie operacje, które może wykonać zwykły administrator serwera.

Autoryzacja

Autoryzacja określa, jakie czynności można wykonywać w usłudze Azure SQL Database przy użyciu danej tożsamości. Ta autoryzacja jest kontrolowana przez uprawnienia przyznane bezpośrednio członkostwu w ramach konta użytkownika i roli bazy danych. Rola bazy danych służy do grupowania uprawnień w celu ułatwienia administrowania. Dodaj użytkownika do roli, aby przyznać uprawnienia, które ma rola. Uprawnienia te mogą obejmować możliwość logowania się do bazy danych, możliwość odczytywania tabeli oraz możliwość dodawania i usuwania kolumn z bazy danych. Zalecanym najlepszym rozwiązaniem jest przyznanie użytkownikom minimalnych niezbędnych uprawnień. Proces udzielania autoryzacji zarówno użytkownikom SQL, jak i Microsoft Entra jest taki sam.

W tym przykładzie konto administratora serwera, z którym nawiązujesz połączenie, jest członkiem roli db_owner, która ma uprawnienia do wykonywania dowolnych czynności w bazie danych.

Uwierzytelnianie i autoryzacja w praktyce

Zalecanym najlepszym rozwiązaniem jest używanie przez daną aplikację dedykowanego konta do uwierzytelniania. W ten sposób można ograniczyć uprawnienia nadane aplikacji i zmniejszyć ryzyko złośliwych działań w przypadku, gdy kod aplikacji jest narażony na atak polegający na wstrzyknięciu kodu SQL. Zalecamy utworzenie użytkownika zawartej bazy danych, który umożliwia aplikacji bezpośrednie uwierzytelnianie w bazie danych. Aby uzyskać więcej informacji, zobacz artykuł Contained Database Users - Making Your Database Portable (Użytkownicy zawartej bazy danych — tworzenie przenośnej bazy danych).

Uwierzytelnianie entra firmy Microsoft umożliwia centralne zarządzanie tożsamościami użytkowników bazy danych i alternatywą dla uwierzytelniania programu SQL Server.

Zobacz, jak skonfigurować użytkownika i udzielić im dostępu do bazy danych. W takim przypadku używasz uwierzytelniania SQL dla użytkownika, ale proces będzie zasadniczo taki sam, jeśli używasz uwierzytelniania Microsoft Entra.

Tworzenie użytkownika bazy danych

Utwórz nowego użytkownika, którego możesz użyć do udzielenia dostępu.

  1. W usłudze Cloud Shell na maszynie wirtualnej appServer połącz się ponownie z bazą danych jako .ADMINUSER

    sqlcmd -S tcp:serverNNNNN.database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    
  2. Uruchom następujące polecenie, aby utworzyć nowego użytkownika. Ten użytkownik to zawarty użytkownik , który zezwala tylko na dostęp do bazy danych witryny Marketplace . Możesz dostosować hasło zgodnie z potrzebami, ale pamiętaj o tym, ponieważ potrzebujesz go do przyszłego kroku.

    CREATE USER ApplicationUser WITH PASSWORD = 'YourStrongPassword1';
    GO
    

Dzięki tym poświadczeniom użytkownik może uwierzytelnić się w bazie danych, ale nie ma autoryzacji dostępu do żadnych danych. Udziel temu użytkownikowi dostępu.

Nadawanie uprawnień użytkownikowi

Ustaw użytkownika na członka db_datareader ról i db_datawriter , udzielając odpowiednio dostępu do odczytu i zapisu w bazie danych. Chcesz również uniemożliwić temu użytkownikowi dostęp do tabeli przy użyciu adresów.

  1. Mimo że nadal masz połączenie z sqlcmd maszyną wirtualną appServer, uruchom następujący kod T-SQL, aby przyznać db_datareader użytkownikowi utworzonemu użytkownikowi role i .db_datawriter

    ALTER ROLE db_datareader ADD MEMBER ApplicationUser;
    ALTER ROLE db_datawriter ADD MEMBER ApplicationUser;
    GO
    
  2. Zakres dostępu można jeszcze bardziej zawęzić. Możesz zablokować dostęp użytkownika do innych elementów w bazie danych przy użyciu operatora DENY. Uruchom następujące polecenie języka T-SQL, aby uniemożliwić użytkownikowi ApplicationUser wybieranie danych z tabeli SalesLT.Address.

    DENY SELECT ON SalesLT.Address TO ApplicationUser;
    GO
    

Teraz zaloguj się jako ten użytkownik i przyjrzyj się tej konfiguracji w akcji.

  1. Nadal w wierszu polecenia języka T-SQL wprowadź polecenie exit , aby zakończyć sesję.

  2. Teraz zaloguj się ponownie do bazy danych, ale jako utworzony użytkownik.

    sqlcmd -S tcp:serverNNNNN.database.windows.net,1433 -d marketplaceDb -U 'ApplicationUser' -P '[password]' -N -l 30
    
  3. Uruchom poniższe zapytanie. To zapytanie pobiera dane z tabeli, do którego użytkownik ma uprawnienia dostępu.

    SELECT FirstName, LastName, EmailAddress, Phone FROM SalesLT.Customer;
    GO
    

    Powinna zostać zwrócona lista klientów.

    FirstName      LastName       EmailAddress                    Phone
    -------------- -------------- ------------------------------- ------------
    Orlando        Gee            orlando0@adventure-works.com    245-555-0173
    Keith          Harris         keith0@adventure-works.com      170-555-0127
    Donna          Carreras       donna0@adventure-works.com      279-555-0130
    Janet          Gates          janet1@adventure-works.com      710-555-0173
    ...
    
  4. Zobacz, co się stanie, gdy spróbujesz wykonać zapytanie dotyczące tabeli, do której nie masz dostępu.

    SELECT * FROM SalesLT.Address;
    GO
    

    Powinien zostać wyświetlony komunikat informujący, że nie masz dostępu do tej tabeli.

    Msg 229, Level 14, State 5, Server server-22942, Line 1
    The SELECT permission was denied on the object 'Address', database 'marketplace', schema 'SalesLT'.
    

Jak widać tutaj, mimo że udzielono dostępu do odczytu/zapisu w bazie danych, można dodatkowo zabezpieczyć dostęp do danych, jawnie odmawiając dostępu do tabel. Jeśli masz większą liczbę użytkowników o podobnych uprawnieniach dostępu, możesz utworzyć role niestandardowe zawierające odpowiednie uprawnienia, aby uprościć administrację.

Ważne jest odpowiednie zabezpieczenie bazy danych i przyznawanie dostępu tylko w uzasadnionym zakresie. Usługa Azure SQL Database oferuje wbudowane funkcje kompleksowego sterowania uwierzytelnianiem i autoryzacją tożsamości uzyskujących dostęp do danych w bazie.