Упражнение. Управление доступом к базе данных

Завершено

Несмотря на то, что вы можете подключиться к базе данных через сеть, которая не означает, что вы фактически можете получить доступ к данным. После многоуровневого подхода необходимо убедиться, что доступ к данным может получить только пользователи, которым требуется доступ к данным. Для получения доступа мы используем проверку подлинности и авторизацию.

Проверка подлинности

Проверка подлинности — это процесс проверки удостоверения. Это удостоверение может быть пользователем, службой, работающей в системе или самой системой, например виртуальной машиной. С помощью процесса проверки подлинности вы гарантируете, что пользователь или система являются тем, кто они утверждают. База данных SQL поддерживает два типа проверки подлинности: Проверка подлинности SQL и проверка подлинности Microsoft Entra.

Проверка подлинности SQL

Метод проверки подлинности SQL использует имя пользователя и пароль. Учетные записи пользователей можно создавать в основной базе данных и предоставлять разрешения во всех базах данных на сервере. Вы также можете создать пользователей в самой базе данных, которая называется содержащимися пользователями, и предоставить им доступ только к этой базе данных. При создании логического сервера для базы данных вы указали вход администратора сервера с именем пользователя и паролем. С помощью этих учетных данных можно пройти проверку подлинности в любой базе данных на этом сервере в качестве владельца базы данных или dbo.

Проверка подлинности Microsoft Entra

Этот метод проверки подлинности использует удостоверения, управляемые идентификатором Microsoft Entra, и поддерживается для управляемых и интегрированных доменов. По возможности используйте проверку подлинности Microsoft Entra (встроенная безопасность). С помощью проверки подлинности Microsoft Entra можно управлять удостоверениями пользователей базы данных и другими службы Майкрософт в одном центральном расположении. Централизованное управление удостоверениями позволяет использовать единое расположение для управления пользователями и упрощает управление разрешениями. Если вы хотите использовать проверку подлинности Microsoft Entra, необходимо создать другого администратора сервера с именем администратора Microsoft Entra, который может администрировать пользователей и группы Microsoft Entra. Этот администратор также может выполнять все операции, доступные обычному администратору.

Санкционирование

Авторизация относится к действиям, доступным удостоверению в базе данных SQL Azure. Эта авторизация контролируется разрешениями, предоставленными непосредственно учетной записи пользователя и роли базы данных. Роль базы данных используется для объединения разрешений для упрощения администрирования. Добавьте пользователя в роль, чтобы предоставить им разрешения. Эти разрешения могут включать возможность входа в базу данных, возможность чтения таблицы и возможность добавлять и удалять столбцы из базы данных. Обычно пользователям рекомендуется предоставлять наименьшие необходимые привилегии. Процесс предоставления авторизации пользователям SQL и Microsoft Entra одинаков.

В этом примере учетная запись администратора сервера, с которой вы подключаетесь, является членом роли db_owner, которая имеет полномочия на все действия в базе данных.

Проверка подлинности и авторизация на практике

В приложениях рекомендуется использовать выделенную учетную запись для проверки подлинности. Это позволит вам ограничить разрешения, предоставляемые приложению, и снизить риски вредоносных действий в случае, если приложение уязвимо для атак путем внедрения кода SQL. Рекомендуется создать пользователя автономной базы данных, который позволяет приложению проходить проверку подлинности непосредственно в базе данных. Дополнительные сведения см. в статье Пользователи автономной базы данных — создание переносимой базы данных.

Используйте проверку подлинности Microsoft Entra для централизованного управления удостоверениями пользователей базы данных и в качестве альтернативы проверке подлинности SQL Server.

Узнайте, как настроить пользователя и предоставить им доступ к базе данных. В этом случае вы используете проверку подлинности SQL для пользователя, но процесс будет по сути таким же, если вы используете проверку подлинности Microsoft Entra.

Создание пользователя базы данных

Создайте нового пользователя, которому можно предоставить доступ.

  1. В Cloud Shell на виртуальной машине appServer подключитесь к базе данных еще раз в роли ADMINUSER.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    
  2. Чтобы создать пользователя, выполните следующую команду. Этот пользователь является содержащимся пользователем, который разрешает доступ только к базе данных Marketplace. Вы можете настроить пароль по мере необходимости, но обязательно запишите его, так как вам потребуется для дальнейшего шага.

    CREATE USER ApplicationUser WITH PASSWORD = 'YourStrongPassword1';
    GO
    

С помощью этих учетных данных пользователь может пройти проверку подлинности в базе данных, но они не авторизованы для доступа к данным. Предоставьте этому пользователю доступ.

Предоставление разрешений пользователю

Сделайте пользователя членом db_datareader и db_datawriter ролями, предоставляя доступ к чтению и записи в базу данных соответственно. Вы также хотите запретить этому пользователю доступ к таблице с адресами.

  1. При подключении к sqlcmd appServer запустите следующий T-SQL, чтобы предоставить db_datareader созданным пользователем роли и db_datawriter роли.

    ALTER ROLE db_datareader ADD MEMBER ApplicationUser;
    ALTER ROLE db_datawriter ADD MEMBER ApplicationUser;
    GO
    
  2. Вы можете сузить область доступа дальше. Вы можете запретить пользователю доступ к другим элементам в базе данных с помощью оператора DENY. Выполните следующий запрос T-SQL, чтобы запретить пользователю ApplicationUser выбирать данные из SalesLT.Address таблицы.

    DENY SELECT ON SalesLT.Address TO ApplicationUser;
    GO
    

Теперь выполните вход от имени этого пользователя и просмотрите эту конфигурацию в действии.

  1. В командной строке T-SQL введите exit, чтобы выйти из сеанса.

  2. Теперь войдите в базу данных, но по мере создания пользователя.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U 'ApplicationUser' -P '[password]' -N -l 30
    
  3. Выполните следующий запрос. Этот запрос извлекает данные из таблицы, к которым пользователь может получить доступ.

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

    Вы получите список клиентов.

    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. Узнайте, что происходит при попытке запросить таблицу, к которым у вас нет доступа.

    SELECT * FROM SalesLT.Address;
    GO
    

    Вы увидите сообщение о том, что у вас нет доступа к этой таблице.

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

Как вы видите здесь, даже если вы предоставили доступ на чтение и запись к базе данных, вы можете дополнительно защитить доступ к данным, явно запрещая доступ к таблицам. Если бы у вас было несколько пользователей со схожим доступом, вы могли бы создать пользовательские роли с соответствующими разрешениями и упростить себе работу.

Очень важно обеспечивать безопасность базы данных и предоставлять доступ только по необходимости. База данных SQL Azure предоставляет встроенные возможности полного управления проверкой подлинности и авторизацией для доступа к данным в базе данных.