Управление доступом к базам данных SQL Server. Добавление существующей информационной базы в список информационных базы окна запуска «1С:Предприятие»

Права доступа (разрешения) для работы с базами геоданных настраиваются путем назначения пользователям и группам предварительно настроенных ролей. Учетная запись или группа в этом случае является учетной записью Windows, которая идентифицируют пользователя, а роли управляют разрешениями для действий, которые может выполнять пользователь.

Предварительно настроенные роли и возможные права доступа перечислены ниже:

  • Нет (None) – Никакого доступа к базе геоданных или к набору данных базы геоданных не было предоставлено.
  • Только чтение (Read Only) – Пользователь может просматривать и выбирать данные.
  • Чтение/Запись (Read/Write) – Пользователь может выполнять чтение, запись и создание новых наборов данных в базе геоданных или может выполнять чтение и запись в существующих наборах данных.
  • Администратор (Admin) – Пользователь может выполнять административные задачи в определенной базе геоданных.
  • Администратор сервера (Server administrator) – Пользователь, который управляет сервером баз данных.

Разрешения являются кумулятивными. Если вы администратор на уровне сервера базы данных, вы являетесь также и администратором базы геоданных. Если вы администратор базы геоданных, вы автоматически получаете разрешения на чтение/запись (read/write) для всех наборов данных в этой базе геоданных.

Ниже описан каждый уровень, на котором разрешения могут быть назначены.

Права доступа на уровне сервера баз данных

Права доступа на уровне сервера базы данных могут быть настроены только для администратора сервера; пользователь или является администратором сервера, или нет.

В процессе постинсталляции, которая настраивает экземпляр SQL Server Express для хранения баз геоданных, на сервер баз данных добавляется учетная запись Windows. В этот момент учетной записи назначается роль администратора сервера. После этого права доступа к серверу баз данных могут быть доступны из контекстного меню сервера баз данных в ArcGIS for Desktop .

Администратор сервера может выполнять следующие задачи:

  • Добавлять и удалять пользователей сервера баз данных.
  • Управлять базами геоданных и настройками безопасности.
  • Создавать и удалять базы геоданных.
  • Прикреплять и откреплять базы геоданных.
  • Делать резервные копии и восстанавливать базы геоданных.
  • Обновлять базы геоданных.
  • Выполнять сжатие баз геоданных (Compress).
  • Обновлять статистику и индексы в базе геоданных.
  • Уменьшать базу геоданных (Shrink).
  • Запускать, останавливать и приостанавливать сервер баз данных.

Обычно у вас имеется один администратор сервера баз данных.

Ниже приведен пример диалогового окна Права доступа для серверов баз данных. Учетной записи ROCKETJAY\har была назначена роль администратора сервера (Server administrator).

Права доступа на уровне базы геоданных

Права доступа на уровне баз геоданных назначаются с помощью контекстного меню баз геоданных при доступе к ним через папку Серверы баз данных (Database Servers) в дереве Каталога.

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

  • Только Чтение (Read Only) – Это разрешения позволяет пользователю выбирать данные из любой таблицы в базе геоданных.
  • Чтение/Запись (Read/Write) – Пользователи с назначенным разрешением Чтение/Запись могут выбирать и редактировать все существующие в базе геоданных данные и могут создавать новые элементы базы геоданных, такие как классы объектов. Если пользователь получил разрешение на чтение/запись на уровне базы геоданных, вы не сможете изменить его права доступа на уровне наборов данных, они автоматически будут настроены как Чтение/Запись.
  • Администратор (Admin) – Пользователи с назначенной ролью Администратора (Admin) являются администраторами только этой базы геоданных. Это означает, что пользователь имеет разрешения на чтение/запись на все наборы данных и базе геоданных, и эти права не могут быть отозваны на уровне наборов данных. Например, вы не сможете открыть закладку Права доступа на уровне наборов данных и выбрать права Только чтение (Read Only) для набора классов для этого пользователя.

    Помимо доступа к наборам данных на чтение/запись администраторы баз геоданных могут выполнять административные операции над этими базами геоданных, в том числе создание резервных копий, сжатие баз геоданных, обновление баз геоданных и администрирование прав пользователей базы геоданных. (Пользователи должны существовать на сервере баз данных; администраторы базы геоданных не могут добавлять новых пользователей на сервере баз данных.)

  • Еще одной опцией для роли пользователя является Нет (None) . В таком случае пользователь не будет иметь прав на доступ к данным на уровне базы геоданных; однако при этом пользователю могут быть предоставлены права Только чтение или Чтение/Запись на определенные наборы данных, как описано в разделе "Разрешения на уровне наборов данных". Нет (None) – это уровень прав доступа, по умолчанию устанавливаемый для пользователей, которые добавляются на сервер баз данных.

В следующем примере диалогового окна Права доступа базы геоданных учетная запись ROCKETAY\pllama добавлена к роли Чтение/Запись (Read/Write) для базы геоданных historical.

Для получения дополнительной информации об администраторах сервера и баз геоданных см. раздел Администраторы серверов баз данных .

Права доступа на уровне набора данных

Разрешения для набора данных доступны через команду Права доступа (Privileges) в контекстном меню набора данных, которая открывает диалоговое окно Разрешения . Возможными разрешениями для набора данных, которые доступны через диалоговое окно Разрешения на уровне набора данных, являются Только чтение (Read Only), Чтение/Запись (Read/Write) и Нет (None).

Пользователь может не иметь разрешений на уровне базы геоданных (его разрешения будут установлены как Нет (None)), но ему могут быть выданы права на чтение/запись или только чтение для определенных наборов данных в базе геоданных. Например, вы можете назначить пользователям-аналитикам права только на чтение данных в базе геоданных, но предоставить им права на запись/чтение одного класса объектов в базе геоданных.

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

В случае если администратор сервера создает наборы данных, то их владельцем будет пользователь dbo, и они будут храниться в схеме dbo. Таким образом, администратор сервера может выдать разрешения на любые наборы классов в схеме dbo, но только на объекты в схеме dbo. Другими словами, администратор сервера не сможет выдать разрешения на данные, которыми владеют пользователи, не являющиеся администраторами.

Ниже приведен пример диалогового окна Права доступа для набора данных firestations:


Чтобы узнать больше о процессе назначения ролей пользователям и выдачи и отзыва разрешений, см. раздел

Аннотация: Данная лекция содержит материалы по управлению доступом к базам данных SQL Server, в частности рассматривается управление пользователями базы данных, включение пользователя guest, создание ролей базы данных, предоставление разрешений на базу данных и добавление пользователя базы данных

Одного предоставления доступа к экземпляру SQL Server будет недостаточно для приложения, которому необходим доступ к данным. Предоставив доступ к экземпляру SQL Server , необходимо предоставить доступ к определенным базам данных. Доступ к базам данных предоставляется посредством добавления пользователей базы данных и сопоставления пользователям базы данных имен входа. Каждое имя входа сопоставляется пользователю базы данных для каждой базы данных , к которой этому имени входа нужен доступ . Каждый пользователь базы данных сопоставляется только одному имени входа, за исключением пользователя базы данных dbo.

Примечание . В предыдущих версиях SQL Server можно было использовать для сопоставления нескольких имен входа одному пользователю базы данных системную хранимую процедуру sp_addalias . Так можно поступить и в SQL Server 2005. Однако эту функцию использовать не рекомендуется, поскольку она считается устаревшей и, возможно, будет удалена из следующих версий программы.

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

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

Добавляем пользователя базы данных

Добавить пользователя базы данных можно при помощи инструкции CREATE USER . Следующий пример кода Transact-SQL создает имя входа Peter и сопоставленного с ним пользователя в базе данных Adventure Works :

  • Создаем имя входа Peter

    CREATE LOGIN Peter WITH PASSWORD="Tyu87IOR0";

  • USE AdventureWorks; GO

  • Добавляем пользователя базы данных Peter , который сопоставлен имени входа Peter в БД AdventureWorks .

    CREATE USER Peter FOR LOGIN Peter;

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

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

SELECT HAS_DBACCESS("AdventureWorks");

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

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

  • Изменяем контекст соединения на базу данных AdventureWorks .

    USE AdventureWorks; GO

  • Отзываем разрешение connect для Peter в AdventureWorks .

    REVOKE CONNECT TO Peter;

Удалить пользователя в базы данных можно при помощи инструкции DROP USER .

Предупреждение . В SQL Server 2005 не допускается удаление пользователя, который является владельцем схемы базы данных. О схемах рассказывается далее в этой лекции.

Управляем пользователями, утратившими связь с именами входа

Пользователями, утратившими связь с именами входа, называются пользователи базы данных, которые не сопоставлены имени входа в текущем экземпляре SQL Server. В SQL Server 2005 пользователь может утратить связь с именем входа, если сопоставленное ему имя входа будет удалено. Чтобы получить информацию о таких пользователях, можно выполнить следующий код:

  • Изменяем контекст соединения на базу данных AdventureWorks .

    USE AdventureWorks; GO

  • Составляем отчет обо всех пользователях базы данных, утративших связь с именем входа

    EXECUTE sp_change_users_login @Action="Report";

В SQL Server 2005 допускается создание пользователя, не сопоставленного имени входа, с помощью фразы WITHOUT LOGIN . Пользователи, созданные с помощью фразы WITHOUT LOGIN , не считаются пользователями, утратившими связь с именем входа. Эта возможность может быть очень полезна в ситуации, когда необходимо изменить контекст выполнения какого-либо модуля. О контексте выполнения рассказывается далее в этой лекции. Следующий пример создает пользователя, не сопоставленного имени входа.

  • Изменяем контекст соединения на базу данных AdventureWorks .

    USE AdventureWorks; GO

  • Создаем пользователя базы данных Paul в базе данных AdventureWorks
  • не сопоставляя с ним имени входа в данном экземпляре SQL Server instance

    CREATE USER Paul WITHOUT LOGIN;

Включаем пользователя guest

Когда имя входа, которое не имеет сопоставленного пользователя, пытается соединиться с базой данных, SQL Server предпринимает попытку подключения с использованием пользователя Guest . Пользователь Guest создается по умолчанию без предоставления разрешений. Можно включить пользователя guest , предоставив ему разрешение CONNECT , как показано ниже.

  • Изменяем контекст соединения на базу данных AdventureWorks .

    USE AdventureWorks; GO

  • Предоставляем пользователю Guest доступ к базе данных AdventureWorks .

    GRANT CONNECT TO Guest;

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

Предоставление разрешений на базу данных

Создав пользователей базы данных, необходимо управлять разрешениями для этих пользователей. Это можно осуществить, добавляя пользователей в роли базы данных или предоставляя самим пользователям гранулярные разрешения.

Создаем роли базы данных

Роли базы данных - это участники уровня базы данных. Роли базы данных можно использовать для назначения разрешений базы данных группе пользователей. В SQL Server 2005 по умолчанию создается набор ролей базы данных. Эти роли по умолчанию перечислены в табл. 3.1 .

Таблица 3.1. Роли базы данных по умолчанию
Роль базы данных "Описание
db_accessadmin Может управлять доступом к базе данных
db_backupoperator Может выполнять резервное копирование базы данных
db_datareader Может читать данные из таблиц всех пользователей
db_datawriter Может добавлять, удалять и обновлять данные в таблицах всех пользователей
db_ddladmin Может выполнять любые команды DDL в базе данных
db_denydatareader Не может читать какие-либо данные в таблицах пользователей
db_denydatawriter Не может добавлять, удалять и обновлять какие-либо данные в таблицах пользователей
db_owner Может выполнять все действия по настройке конфигурации и обслуживанию
db_securityadmin Может изменять членство в ролях базы данных и управлять разрешениями
public Особая роль базы данных. Все пользователи принадлежат к роли public . Пользователей из группы public нельзя удалить.

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

  • Изменяем контекст соединения на базу данных AdventureWorks .

    USE AdventureWorks; GO

  • Создаем роль Auditors в базе данных AdventureWorks .

    CREATE ROLE Auditors; GO

  • Добавляем пользователя Peter к роли Auditors

    EXECUTE sp_addrolemember "Auditors", "Peter";

Управляем ролями базы данных

Выполнив запрос системной функции IS_MEMBER, можно проверить, принадлежит ли текущий пользователь к какой-либо роли базы данных. В следующем примере мы проверим, принадлежит ли текущий пользователь к роли базы данных db_owner.

  • Изменяем контекст соединения на базу данных AdventureWorks .

    USE AdventureWorks; GO

  • Проверяем, принадлежит ли текущий пользователь к роли db_owner

    Базы данных (в т.ч. система MySQL) представляет собой сущность для хранения информации в виде таблиц. Дабы чужие БД не были доступны абсолютному каждому пользователю на сервере, существует система пользователей для этих баз данных. Сам доступ к какой-либо БД может быть назначен администратором (либо уполномоченным пользователем) другому пользователю, причем он может быть полным или в некоторой степени ограниченным. Более конкретно эта степень доступа выражается в привилегиях («правах» или «разрешениях»).

    Права для пользователей MySQL

    Существует некоторое количество привилегий в системе БД MySQL которые указаны ниже с описанием. Последние привилегии являются привилегиями администраторского уровня, что явно указано лишь для справки. Полная информация о правах/ привилегиях доступна в документации разработчика MySQL :

    CREATE - позволяет создавать новые базы данных и таблицы

    DROP - позволяет удалять базы данных или таблицы

    INSERT - позволяет добавлять строки к таблице.

    UPDATE - позволяет изменять содержание строк таблиц. Не путать с ALTER, которая позволяет изменять саму структуру таблиц (количество строк/столбцов, типы столбцов).

    DELETE - противоположна INSERT - позволяет удалять строки из таблицы.

    ALTER - позволяет изменять структуру таблиц. Требует CREATE и INSERT привилегии.

    GRANT OPTION - позволяет назначить конкретные права определенному пользователю (также и отобрать). Возможно дать/отобрать только те права, которыми назначающий сам располагает.

    LOCK TABLES - блокирует таблицу на время искусственного внесения в нее изменений (администрирование), чтобы данные внутри нее не могли измениться своим естественным путем (во время рабочего процесса).

    REFERENCES - позволяет создавать связь между таблицами по внешнему ключу.

    EVENT - дает право на создание/изменение/удаление заданий для планировщика

    TRIGGER - позволяет создавать/изменять/удалять триггеры (привязываемые к определенным таблицам), которые при выполнении операций DELETE, UPDATE или INSERT совершают дополнительные действия.

    INDEX - привилегия даёт право добавлять/удалять индексы к (из) таблицам. Сами индексы назначаются вручную, и дают возможность сэкономить время на поиске строк.

    CREATE TEMPORARY TABLES - позволяет создавать временные таблицы на время сессии.

    CREATE VIEW - позволяет создать некоторое представление в виде таблицы, которая фактически не существует как единая и содержит лишь данные других таблиц. К примеру, в этом представлении можно собрать определенные сгруппированные данные из трёх таблиц (оператором SELECT) и по факту собранные данные будут лишь ссылаться на данные этих 3-х таблиц и также будут объединением, не нуждающимся в собственной таблице.

    SHOW VIEW - позволяет проверить каким запросом (из каких данных состоит) создано определенное представление, заданное с помощью CREATE VIEW

    CREATE ROUTINE - позволяет создать процедуру, которая является набором заготовленным набором SQL-команд.

    ALTER ROUTINE - позволяет изменить процедуру, созданную посредством CREATE ROUTINE .

    EXECUTE - позволяет вызывать готовые процедуры.

    FILE - предоставляет доступ на чтение любого файла на сервере, к которому есть доступ у самой системы MySQL и доступ на создание файла в директориях, на которые у MySQL есть права записи.

    CREATE TABLESPACE (admin) - позволяет создавать/изменять/удалять пространства таблиц. Само это пространство является логическим и не связано со структурой БД или схемой. Оно декларирует расположение объектов БД на физических носителях и используется для оптимизации системы БД.

    CREATE USER (admin) - позволяет создавать/изменять/переименовывать/удалять пользователей баз данных.

    PROCESS (admin) - разрешает доступ к информации о потоках (процессах) исполняющихся на сервере.

    PROXY (admin) - позволяет войти пользователем под видом другого пользователя. Используется администратором для проверки/отладки прав доступа у необходимого пользователя.

    RELOAD (admin) - разрешает использование оператора FLUSH, который чистит кеш MySQL

    REPLICATION CLIENT (admin) - позволяет выполнять операции SHOW MASTER STATUS, SHOW SLAVE STATUS и SHOW BINARY LOG.

    REPLICATION SLAVE (admin) - данная привилегия необходима пользователям ведомого сервера БД, чтобы этот сервер мог подключаться к ведущему серверу в роли ведомого. Без этой привилегии ведомые сервера не смогут запрашивать обновления баз данных и таблиц у ведущего сервера.

    SHOW DATABASES (admin) - позволяет выполнять оператор SHOW DATABASES. Пользователи, не имеющие подобной привилегии, при выполнении данного оператора смогут лишь увидеть базы данных к которым у них есть какие-либо права.

    SHUTDOWN (admin) - привилегия позволяет выполнить оператор SHUTDOWN, выключающий MySQL сервер.

    SUPER (admin) - привилегия, дающая право на множество операций:

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

    ALL (admin) - пользователю, получившему данную привилегию, автоматически назначаются все права в рамках уровня привилегий (возможных привилегий в принципе, согласно контексту выдачи привилегий). Не назначается только привилегия GRANT OPTION в данном случае.

    Назначение прав для пользователей MySQL в панелях управления хостингом

    • DirectAdmin
    • cPanel
    • ISPmanager
    • Webuzo

    DirectAdmin

    На главной странице DirectAdmin из под уровня пользователя в меню Your Account переходим в раздел MySQL Management :

    Тут мы можем как создать нового пользователя для данной базы путем перехода по Create New Database User , так и привязать к ней существующего,. Следует отметить, что нет специально отведенного интерфейса для управления пользователями. Он доступен только посредством перехода через какую-либо базу данных. Чтобы дать пользователю права - переходим по ссылке modify privileges :

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

    После этого произойдет переход на страницу подтверждения сохранения. Всё, права выданы.

    cPanel

    На главной странице cPanel нам необходимо найти раздел Базы данных в нем перейти по Базы данных MySQL :

    Все манипуляции с базами данных MySQL, пользователями БД и их правами производятся именно в этом меню.

    Если у нас нет ни базы, ни пользователя, то создаем их в соответствующих разделах страницы:

    Раздел Текущие базы данных обновится:

    Создаем пользователя:

    Раздел Текущие пользователи обновится:

    Для назначения прав определенному пользователю к определенной базе данных нам необходимо найти на странице раздел Добавить пользователя в базу данных и добавить необходимого пользователя к необходимой базе данных:

    После добавления пользователя к базе данных откроется диалоговое окно для назначения привилегий:

    Кнопка «Все права» эквивалентна привилегии ALL, описанной в начале руководства, и назначит все возможные права пользователю в контексте принадлежности пользователя определенной группе пользователей на уровне всего MySQL сервера.

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

    Готово. Пользователь назначен базе данных.

    ISPmanager Lite 5

    При входе в ISPmanager в роли какого-либо пользователя необходимо перейти в Инструменты -> Базы данных из левого меню.

    Далее на открывшемся интерфейсе управления базами данных необходимо выбрать необходимую базу и перейти в меню Users для перехода к интерфейсу управления пользователями БД. Если же баз данных нет, то создать новую можно перейдя по кнопке Add .

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

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

    После этого мы увидим все права, которые можно назначить этому пользователю:

    По-умолчанию при создании пользователя и БД назначаются все права. Изменяем те, которые нам необходимо и сохраняем результаты. После этого Вас вернет на страницу управления пользователями баз данных.

    Webuzo

    Webuzo состоит из 2-х панелей: администраторская и пользовательская. Переходим в пользовательскую панель и на главной странице выбираем Manage Databases

    На открывшейся странице мы можем:

    • увидеть список существующих баз данных [Database(s) ];
    • создать новую базу данных [Create Database ];
    • увидеть список существующих пользователей баз данных [Database User(s) ];
    • создать пользователя баз данных и назначить его определенной базе данных [Add User To Database ]

    Если целевой базы данных пока что не существует, то переходим в Create Database и создаем новую базу данных:

    Если все же целевая база данных уже существует, то в управлении базами данных нам необходимо перейти в Add User To Database и создать нового пользователя БД или указать какого-либо существующего для его привязки к базе данных:

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

    При успешном изменении прав в текущем окне появится надпись Database Privileges Updated . Задача выполнена.

    Всем привет! Сейчас мы с Вами рассмотрим примеры создания и удаления пользователей в СУБД Microsoft SQL Server как с использованием инструкций Transact-SQL, так и с использованием среды Management Studio.

    Процесс создания пользователей в MS SQL Server включает два этапа:

    1. Создание имени входа на SQL Server. Данное имя необходимо, для того чтобы предоставить пользователю возможность подключиться к экземпляру SQL Server;
    2. Создание пользователя базы данных. В данном случае мы уже предоставляем пользователю разрешения на объекты базы данных.

    Примечание! В качестве SQL сервера у меня для примера будет выступать версия Microsoft SQL Server 2012 Express . На данном SQL сервере создана тестовая база данных Test.

    Создание имени входа на MS SQL Server

    Прежде чем приступать к созданию имени входа на SQL сервер необходимо определиться с методом аутентификации. Существует два варианта:

    1. Проверка подлинности Windows – это когда имя входа может идентифицировать пользователя как учетную запись Windows или как члена группы Windows (в том числе и доменные учетные записи, и группы );
    2. Проверка подлинности SQL Server . В данном случае имя входа существует только в SQL Server.

    Давайте рассмотрим пару примеров создания имени входа на SQL сервер. Сначала мы это сделаем с помощью среды SQL Server Management Studio , а затем с использованием языка Transact-SQL.

    Создание имени входа с использованием среды SQL Server Management Studio

    Запускаем Management Studio, затем в обозревателе объектов находим пункт «Безопасность », раскрываем его плюсиком, кликаем правой кнопкой мыши по пункту «Имена входа » и выбираем пункт «Создать имя входа ».

    Далее для примера давайте создадим тестовое имя входа с проверкой подлинности SQL Server. Мы указываем имя входа, придумываем пароль и подтверждаем его. Также мы можем отметить несколько опций, например, использование политики паролей, база данных по умолчанию, язык по умолчанию и другие.

    Затем нажимаем на кнопку «ОК », после чего будет создано имя входа TestLogin. По умолчанию данное имя входа будет включено, и оно будет иметь права роли сервера «public».

    Создание имени входа с использованием языка Transact-SQL

    Для того чтобы создать имя входа на языке Transact-SQL необходимо в Management Studio открыть редактор запросов и выполнить следующую инструкцию (она делает ровно то же самое, что и наши действия выше в графическом интерфейсе Management Studio ).

    CREATE LOGIN WITH PASSWORD=N"Pa$$w0rd", DEFAULT_DATABASE=, DEFAULT_LANGUAGE=[русский], CHECK_EXPIRATION=OFF, CHECK_POLICY=ON GO

    Другими словами для создания имени входа в SQL сервер используется инструкция CREATE LOGIN .

    Создание имени входа на SQL Server с проверкой подлинности Windows

    Для того чтобы создать имя входа с проверкой подлинности Windows выполните следующую SQL инструкцию:

    CREATE LOGIN FROM WINDOWS WITH DEFAULT_DATABASE=, DEFAULT_LANGUAGE=[русский]; GO

    • ComputerName\NameUser – это Имя компьютера\Имя пользователя;
    • FROM WINDOWS – указывает, что будет использоваться проверка подлинности Windows;
    • WITH DEFAULT_DATABASE= – база данных по умолчанию;
    • DEFAULT_LANGUAGE=[русский] – язык по умолчанию.

    Отключение и включение имен входа в MS SQL Server

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

    Отключение ALTER LOGIN TestLogin DISABLE; --Включение ALTER LOGIN TestLogin ENABLE;

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

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

    Давайте создадим пользователя TestLogin также двумя способами, т.е. с помощью Management Studio и языка T-SQL .

    Создание пользователя базы данных с помощью Management Studio

    Открываем Management Studio, в обозревателе объектов находим нужную базу данных и открываем ее плюсиком. Затем также плюсиком открываем пункт «Безопасность » и кликаем по папке «Пользователи » правой кнопкой мыши и выбираем пункт «Создать пользователя ».

    Далее вводим имя пользователя и имя входа, которое соответствует данному пользователю (в моем случае имена совпадают ), а также указываем схему по умолчанию (если не указывать, то присвоится схема dbo ).

    Также давайте сразу отметим роль базы данных, которую будет иметь данный пользователь. На странице «Членство » я поставил галочку напротив роли db_datareader , т.е. пользователь будет иметь права на чтение данных из пользовательских таблиц. Жмем «ОК ».

    Создание пользователя базы данных с помощью языка Transact-SQL

    Следующая инструкция T-SQL создает пользователя базы данных (схема по умолчанию dbo ) и назначает ему роль db_datareader, т.е. делает то же самое, что и мы чуть ранее в графическом интерфейсе Management Studio.

    USE Test GO CREATE USER FOR LOGIN WITH DEFAULT_SCHEMA= GO ALTER ROLE ADD MEMBER ; GO

    Таким образом, инструкция CREATE USER используется для создания пользователя базы данных.

    Удаление пользователя базы данных и имени входа в MS SQL Server

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

    DROP USER Testlogin;

    Или использовать графический инструмент Management Studio, т.е. в обозревателе объектов, в нужной базе данных выбираем «Безопасность -> Пользователи » и щелкаем правой кнопкой мыши по пользователю, которого необходимо удалить, и выбираем «Удалить ».

    Примечание! Пользователи, которые владеют защищаемыми объектами, не могут быть удалены из базы данных.

    Для удаления имени входа можно также использовать и графический инструмент Management Studio (т.е. «Безопасность -> Имена входа» правой кнопкой мыши по имени, а затем нажать на пункт «Удалить» ) и инструкцию Transact-SQL т.е.

    DROP LOGIN TestLogin;

    Примечание! Удалить текущее имя входа нельзя, как и имя входа, владеющее любым защищаемым объектом уровня сервера или заданием агента SQL Server. Также имя входа нельзя удалить, если в данный момент пользователь подключен к системе. Удалить имя входа без удаления сопоставленного пользователя базы данных можно, но это приведет к появлению пользователей, утративших связь с учетными записями.

    На этом у меня все надеюсь, материал был Вам полезен, пока!

    Рассматривается система безопасности, принятая в языке SQL. Излагаются общие правила разграничения доступа. Описываются режимы аутентификации и компоненты структуры безопасности (пользователи, роли баз данных), администрирование системы безопасности (создание учетных записей и управление ими, управление пользователями и ролями). Дается определение прав пользователя на доступ к объектам базы данных. Рассматриваются неявные права, вопросы запрета доступа и неявного отклонения доступа, а также конфликты доступа.

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

    Стабильная система управления пользователями обязательное условие безопасности данных , хранящихся в любой реляционной СУБД. В языке SQL не существует единственной стандартной команды, предназначенной для создания пользователей базы данных – каждая реализация делает это по-своему. В одних реализациях эти специальные команды имеют определенное сходство, в то время как в других их синтаксис имеет существенные отличия. Однако независимо от конкретной реализации все основные принципы одинаковы.

    Управление пользователями в среде MS SQL Server

    Рассмотрим вопрос создания пользователей в среде MS SQL Server.

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

    В системе SQL-сервер организована двухуровневая настройка ограничения доступа к данным. На первом уровне необходимо создать так называемую учетную запись пользователя (login), что позволяет ему подключиться к самому серверу, но не дает автоматического доступа к базам данных. На втором уровне для каждой базы данных SQL-сервера на основании учетной записи необходимо создать запись пользователя . На основе прав , выданных пользователю как пользователю базы данных (user), его регистрационное имя (login) получает доступ к соответствующей базе данных. В разных базах данных login одного и того же пользователя может иметь одинаковые или разные имена user с разными правами доступа . Иначе говоря, с помощью учетной записи пользователя осуществляется подключение к SQL-серверу, после чего определяются его уровни доступа для каждой базы данных в отдельности.

    В системе SQL-сервер существуют дополнительные объекты – роли , которые определяют уровень доступа к объектам SQL-сервера. Они разделены на две группы: назначаемые для учетных записей пользователя сервера и используемые для ограничения доступа к объектам базы данных.

    Итак, на уровне сервера система безопасности оперирует следующими понятиями:

    • аутентификация ;
    • учетная запись ;
    • встроенные роли сервера.

    На уровне базы данных применяются следующие понятия;

    • пользователь базы данных;
    • фиксированная роль базы данных;
    • пользовательская роль базы данных.

    Режимы аутентификации

    SQL Server предлагает два режима аутентификации пользователей :

    • режим аутентификации средствами Windows NT/2000;
    • смешанный режим аутентификации (Windows NT Authentication and SQL Server Authentication).

    Администрирование системы безопасности

    Для создания пользователя в среде MS SQL Server следует предпринять следующие шаги:

    1. Создать в базе данных учетную запись пользователя , указав для него пароль и принятое по умолчанию имя базы данных (процедура sp_addlogin ).
    2. Добавить этого пользователя во все необходимые базы данных (процедура sp_adduser ).
    3. Предоставить ему в каждой базе данных соответствующие привилегии (команда GRANT ) .

    Создание новой учетной записи может быть произведено с помощью системной хранимой процедуры:

    sp_addlogin [@login=] "учетная_запись" [, [@password=] "пароль"] [, [@defdb=] "база_данных_по_умолчанию"]

    После завершения аутентификации и получения идентификатора учетной записи (login ID) пользователь считается зарегистрированным, и ему предоставляется доступ к серверу. Для каждой базы данных, к объектам которой он намерен получить доступ , учетная запись пользователя (login) ассоциируется с пользователем (user) конкретной базы данных, что осуществляется посредством процедуры:

    sp_adduser [@loginame=] "учетная_запись" [, [@name_in_db=] "имя_пользователя"] [, [@grpname=] "имя_роли"]

    Отобразить учетную запись Windows NT в имя пользователя позволяет хранимая процедура:

    sp_grantdbaccess [@login=] ‘учетная_запись’ [, [@name_in_db=]‘имя_пользователя’]

    Пользователь , который создает объект в базе данных (таблицу, хранимую процедуру, просмотр), становится его владельцем . Владелец объекта (database object owner dbo) имеет все права доступа к созданному им объекту. Чтобы пользователь мог создать объект, владелец базы данных (dbo) должен предоставить ему соответствующие права . Полное имя создаваемого объекта включает в себя имя создавшего его пользователя .

    Владелец объекта не имеет специального пароля или особых прав доступа . Он неявно имеет полный доступ , но должен явно предоставить доступ другим пользователям .

    SQL Server позволяет передавать права владения от одного пользователя другому с помощью процедуры:

    sp_changeobjectowner [@objname=] ‘имя_объекта’ [@newowner=] ‘имя_владельца’

    Роль позволяет объединить в одну группу пользователей , выполняющих одинаковые функции.

    В SQL Server реализовано два вида стандартных ролей : на уровне сервера и на уровне баз данных. При установке SQL Server создаются фиксированные роли сервера (например, sysadmin с правом выполнения любых функций SQL-сервера) и фиксированные роли базы данных (например, db_owner с правом полного доступа к базе данных или db_accessadmin с правом добавления и удаления пользователей ). Среди фиксированных ролей базы данных существует роль public, которая имеет специальное назначение, поскольку ее членами являются все пользователи , имеющие доступ к базе данных.

    Можно включить любую учетную запись SQL Server (login) или учетную запись Windows NT в любую роль сервера.

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

    В роль базы данных можно включить пользователей SQL Server, роли SQL Server, пользователей Windows NT.

    Различные действия по отношению к роли осуществляются при помощи специальных процедур:

    • создание новой роли :

      sp_addrole [@rolename=] "имя_роли" [, [@ownername=] "имя_владельца"]

    • добавление пользователя к роли :

      sp_addrolemember [@rolename=] "имя_роли", [@membername=] "имя_пользователя"

    • удаление пользователя из роли :

      sp_droprolemember [@rolename=] "имя_роли", [@membername=] "имя_пользователя"

    • удаление роли :

      sp_droprole [@rolename=] "имя_роли"

    Управление доступом к данным

    Определение привилегий в стандарте языка

    Каждая СУБД должна поддерживать механизм, гарантирующий, что доступ к базе данных смогут получить только те пользователи , которые имеют соответствующее разрешение. Язык SQL включает операторы GRANT и REVOKE , предназначенные для организации защиты таблиц в базе данных. Механизм защиты построен на использовании идентификаторов пользователей , предоставляемых им прав владения и привилегий .

    Идентификатором пользователя называется обычный идентификатор языка SQL, применяемый для обозначения некоторого пользователя базы данных. Каждому пользователю должен быть назначен собственный идентификатор , присваиваемый администратором базы данных. Из очевидных соображений безопасности идентификатор пользователя , как правило , связывается с некоторым паролем . Каждый выполняемый СУБД SQL-оператор выполняется от имени какого-либо пользователя . Идентификатор пользователя определяет, на какие объекты базы данных пользователь может ссылаться и какие операции с этими объектами он имеет право выполнять.

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

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

    • SELECT – право выбирать данные из таблицы;
    • INSERT – право вставлять в таблицу новые строки;
    • UPDATE – право изменять данные в таблице;
    • DELETE – право удалять строки из таблицы;
    • REFERENCES – право ссылаться на столбцы указанной таблицы в описаниях требований поддержки целостности данных;
    • USAGE – право использовать домены, проверки и наборы символов.

    Привилегии INSERT и UPDATE могут ограничиваться лишь отдельными столбцами таблицы, в этом случае пользователю разрешается модифицировать значения только указанных столбцов. Аналогичным образом привилегия REFERENCES может распространяться исключительно на отдельные столбцы таблицы, что позволит использовать их имена в формулировках требований защиты целостности данных – например, в предложениях CHECK и FOREIGN KEY , входящих в определение других таблиц, тогда как применение для подобных целей остальных столбцов будет запрещено .

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

    Создавая представление с помощью оператора CREATE VIEW , пользователь автоматически становится владельцем этого представления и также получает полный набор прав . Для создания представления пользователю достаточно иметь привилегию SELECT для всех входящих в него таблиц и привилегию REFERENCES для всех столбцов, упоминаемых в определении этого представления. Привилегии INSERT , UPDATE и DELETE в отношении созданного представления пользователь получит только в том случае, если имеет соответствующие привилегии в отношении всех используемых в представлении таблиц.

    Предоставление привилегий пользователям

    Оператор GRANT применяется для предоставления привилегий в отношении поименованных объектов базы данных указанным пользователям . Обычно его использует владелец таблицы с целью предоставления доступа к ней другим пользователям . Оператор GRANT имеет следующий формат:

    <предоставление_привилегий>::= GRANT {<привилегия>[,...n] | ALL PRIVILEGES} ON имя_объекта TO {<идентификатор_пользователя> [,...n]| PUBLIC} [ WITH GRANT OPTION]

    Параметр <привилегия> представляет собой:

    <привилегия>::= {SELECT | DELETE | INSERT [(имя_столбца[,...n])] | UPDATE [(имя_столбца[,...n])]} | REFERENCES [(имя_столбца[,...n])] | USAGE }

    Из соображений упрощения в операторе GRANT можно указать ключевое слово ALL PRIVILEGES , что позволит предоставить указанному пользователю все существующие привилегии без необходимости их перечисления. Кроме того, в этом операторе может указываться ключевое слово PUBLIC , означающее предоставление доступа указанного типа не только всем существующим пользователям , но также и всем тем, кто будет определен в базе данных впоследствии.

    Параметр имя_объекта может использоваться как имя таблицы базы данных, представления, домена, набора символов, проверки.

    Благодаря параметру WITH GRANT OPTION , указанные в операторе GRANT пользователи имеют право передавать все предоставленные им в отношении указанного объекта привилегии другим пользователям , которые, в свою очередь, будут наделены точно таким же правом передачи своих полномочий. Если данный параметр не будет указан, получатель привилегии не сможет передать свои права другим пользователям . Таким образом, владелец объекта может четко контролировать, кто получил право доступа к объекту и какие полномочия ему предоставлены .

    Отмена предоставленных пользователям привилегий

    В языке SQL для отмены привилегий , предоставленных пользователям посредством оператора GRANT , используется оператор REVOKE . С помощью этого оператора могут быть отменены все или некоторые из привилегий , полученных указанным пользователем раньше. Оператор REVOKE имеет следующий формат:

    <отмена_привилегий>::= REVOKE {<привилегия>[,...n] | ALL PRIVILEGES} ON имя_объекта FROM {<идентификатор_пользователя> [,...n]| PUBLIC}

    Ключевое слово ALL PRIVILEGES означает, что для указанного пользователя отменяются все привилегии , предоставленные ему ранее тем пользователем, который ввел данный оператор. Необязательная фраза GRANT OPTION FOR позволяет для всех привилегий , переданных в исходном операторе GRANT фразой WITH GRANT OPTION , отменять возможность их передачи независимо от самих привилегий .

    Если в операторе указано ключевое слово RESTRICT , успешное выполнение команды REVOKE возможно лишь в том случае, когда перечисленные в операторе привилегии не могут послужить причиной появления у каких-либо других пользователей так называемых "оставленных" привилегий . С помощью параметра CASCADE удаляются все привилегии , которые иначе могли бы остаться у других пользователей .

    "Оставленными" являются привилегии , сохранившиеся у пользователя , которому они в свое время были предоставлены с помощью параметра GRANT OPTION .

    Поскольку наличие привилегии необходимо для создания определенных объектов, вместе с ее удалением можно лишиться права , за счет использования которого был образован тот или иной объект (подобные объекты называются "брошенными"). Если в результате выполнения оператора REVOKE могут появиться брошенные объекты (например, представления), право будет отменено при условии, что в нем не указывается ключевое слово CASCADE . Если ключевое слово CASCADE в операторе присутствует, то для любых брошенных объектов, возникающих при выполнении исходного оператора REVOKE , будут автоматически выданы операторы DROP .

    Привилегии , которые были предоставлены указанному пользователю другими пользователями , не могут быть затронуты оператором REVOKE . Следовательно, если другой пользователь также предоставил данному пользователю удаляемую привилегию , то право доступа к соответствующей таблице у указанного пользователя сохранится. Например, пусть пользователь A и пользователь Е имели право INSERT на таблицу Товар . Пользователь А предоставил пользователю B привилегию INSERT для таблицы Товар , причем с указанием WITH GRANT OPTION (этап 1). Пользователь B передал эту привилегию пользователю C (этап 2). Затем пользователь C получил ее же от пользователя E (этап 3). Далее пользователь C предоставил упомянутую привилегию пользователю D (этап 4). Когда пользователь A отменяет привилегию INSERT для пользователя B , она не может быть отменена и для пользователя C , поскольку ранее он уже получил ее от пользователя E . Если бы пользователь E не предоставил данной привилегии пользователю C , то удаление привилегии пользователя B имело бы следствием каскадное удаление привилегий для пользователей C и D (см. таблицу 17.1).

    Реализация прав на доступ к объектам баз данных в среде MS SQL Server

    Категории прав в среде MS SQL Server

    При подключении к SQL Server все возможные действия пользователей определяются правами (привилегиями , разрешениями), выданными их учетной записи , группе или роли , в которых они состоят.

    Права можно разделить на три категории:

    • права на доступ к объектам ;
    • права на выполнение команд ;
    • неявные права .
    Таблица 17.1.
    Пользователь A Пользователь B Пользователь C Пользователь D Пользователь E
    GRANT INSERT ON Товар TO B WITH GRANT OPTION Получение права
    Получение права от B . Получение права от E GRANT INSERT ON Товар TO C WITH GRANT OPTION
    GRANT INSERT ON Товар TO D Получение права
    REVOKE INSERT ON Товар TO B CASCADE Отмена права Сохранение права Сохранение права Сохранение права

    Работа с данными и выполнение хранимых процедур требуют наличия класса доступа , называемого правами на доступ к объектам баз данных. Под объектами подразумеваются таблицы, столбцы таблиц, представления, хранимые процедуры.

    Для различных объектов применяются разные наборы прав доступа к ним:

    • SELECT , INSERT , UPDATE , DELETE , REFERENCES – для таблицы или представления;
    • SELECT , UPDATE – для конкретного столбца таблицы или представления;
    • EXECUTE – для хранимых процедур и функций.

    Право INSERT позволяет вставлять новые строки в таблицу или представление и выдается только на уровне таблицы или представления; оно не может быть выдано на уровне столбца.

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

    Право DELETE позволяет удалять строки из таблицы или представления, выдается только на уровне таблицы или представления, но не может быть выдано на уровне столбца.

    Право SELECT разрешает выборку данных и может выдаваться как на уровне таблицы, так и на уровне отдельного столбца.

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

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

    Для управления разрешением пользователя на доступ к объектам базы данных используется команда:

    <предоставление_привилегий>::= GRANT { ALL [ PRIVILEGES] | <привилегия> [,...n]} { [(имя_столбца [,...n])] ON { имя_таблицы | имя_просмотра} | ON {имя_таблицы | имя_просмотра } ([имя_столбца [,...n])] | ON {имя_хранимой_процедуры | имя_внешней_процедуры}} TO { имя_пользователя | имя_группы | имя_роли} [,...n]

    Параметр <привилегия>

    <привилегия>::= {SELECT | DELETE | INSERT | UPDATE | EXECUTE | REFERENCES }

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

    Необязательный параметр AS {имя_группы | имя_роли } позволяет указать участие пользователя в роли , обеспечивающей предоставление прав другим пользователям .

    Единственное право доступа , которое может быть предоставлено для хранимой процедуры, – право на ее выполнение (EXECUTE ). Естественно, кроме этого владелец хранимой процедуры может просматривать и изменять ее код.

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

    Права на выполнение команд SQL

    Этот класс прав контролирует возможность создания объектов в базе данных, самой базы данных и выполнения процедуры резервного копирования. Можно использовать следующую команду для предоставления права на выполнение команд SQL:

    <предоставление_права_выполнения>::= GRANT {ALL | <команда>

    Параметр <команда> представляет собой следующую конструкцию:

    <команда>::= {CREATE DATABASE | CREATE TABLE | CREATE VIEW | CREATE DEFAULT | CREATE RULE | CREATE PROCEDURE | BACKUP DATABASE | BACKUP LOG | ALL }

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

    Неявные права

    Выполнение некоторых действий не требует явного разрешения и доступно по умолчанию. Эти действия могут быть выполнены только членами ролей сервера или владельцами объектов в базе данных.

    Неявные права не предоставляются пользователю непосредственно, он получает их лишь при определенных обстоятельствах. Например, пользователь может стать владельцем объекта базы данных, только если сам создаст объект либо если кто-то другой передаст ему право владения своим объектом. Таким образом владелец объекта автоматически получит права на выполнение любых действий с объектом, в том числе и на предоставление доступа к объекту другим пользователям . Эти права нигде не указываются, выполнять любые действия позволяет только факт владения объектом.

    Запрещение доступа

    Система безопасности SQL Server имеет иерархическую структуру, и поэтому роли базы данных включают в себя учетные записи и группы Windows NT, пользователей и роли SQL Server. Пользователь же, в свою очередь, может участвовать в нескольких ролях и одновременно иметь разные права доступа для разных ролей . Когда одна из ролей , в которых состоит пользователь , имеет разрешение на доступ к данным, он автоматически имеет аналогичные права . Тем не менее, если возникает необходимость, пользователю можно запретить доступ к данным или командам, тогда аннулируются все разрешения на доступ , полученные им на любом уровне иерархии. При этом гарантируется, что доступ останется запрещенным независимо от разрешений, предоставленных на более высоком уровне.

    Для запрещения доступа

    <запрещение_доступа>::= DENY {ALL | | <привилегия> [,...n]} { [(имя_столбца [,...n])] ON { имя_таблицы | имя_просмотра} | ON {имя_таблицы | имя_просмотра } [имя_столбца [,...n])] | ON {имя_хранимой_процедуры | имя_внешней_процедуры}} TO {имя_пользователя | имя_группы | имя_роли} [,...n]

    Параметр CASCADE позволяет отзывать права не только у конкретного пользователя , но также и у всех тех, кому он предоставил аналогичные права .

    Для запрещения выполнения команд SQL применяется оператор:

    <запрещение_выполнения>::= DENY {ALL | <команда>[,...n]} TO {имя_пользователя | имя_группы | имя_роли} [,...n]

    Неявное отклонение доступа

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

    <неявное_отклонение_доступа>::= REVOKE {ALL [ PRIVILEGES]| | <привилегия> [,...n]} { [(имя_столбца [,...n])] ON { имя_таблицы | имя_просмотра} | ON {имя_таблицы | имя_просмотра } [имя_столбца [,...n])] | ON {имя_хранимой_процедуры | имя_внешней_процедуры}} TO | FROM {имя_пользователя | имя_группы | имя_роли}[,...n]

    Для неявного отклонения разрешения на выполнение команд SQL используется следующая команда:

    <неявное_отклонение_разрешения>::= REVOKE {ALL | <команда>[,...n]} FROM {имя_пользователя | имя_группы | имя_роли}[,...n]

    Смысл параметров аналогичен параметрам команд GRANT и DENY . Параметр GRANT OPTION FOR используется, когда необходимо отозвать право , предоставленное параметром WITH GRANT OPTION команды GRANT . Пользователь сохраняет разрешение на доступ к объекту, но теряет возможность предоставлять это разрешение другим пользователям .

    Конфликты доступа

    Разрешения, предоставленные роли или группе, наследуются их членами. Хотя пользователю может быть предоставлен доступ через членство в одной роли , роль другого уровня может иметь запрещение на действие с объектом. В таком случае возникает конфликт доступа .

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

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

    Создание администратором новой -- базы данных CREATE DATABASE basa_user -- создание нового пользователя с -- именем UserA и паролем ‘123’ -- базой данных по умолчанию для -- пользователя UserA будет база -- с именем basa_user. sp_addlogin "UserA","123","basa_user" -- переход в базу данных basa_user USE basa_user -- добавление в текущую базу данных -- (basa_user) пользователя с именем -- userA sp_adduser "UserA" -- предоставление пользователю userA -- в базе данных basa_user всех прав GRANT ALL TO UserA Пример 17.1. Создание новой базы данных, нового пользователя для этой базы данных, с предоставлением ему всех прав.

    Пример 17.2. Использование ролей.

    Создадим роль stud и включим в эту роль двух пользователей user1 и user2 :

    sp_addrole "stud" sp_addrolemember "stud","user1" sp_addrolemember "stud","user2"

    Предоставим права роли stud и непосредственно пользователю user2 :

    GRANT SELECT, INSERT ON Товар TO stud GRANT SELECT, INSERT ON Товар TO user2

    После выполнения этих команд пользователи user1 и user2 могут выполнять команды выборки и добавления записи в таблицу Товар .

    Приостановим право на выполнение вставки в таблицу Товар для роли stud :

    REVOKE INSERT ON Товар TO stud

    После выполнения предыдущей команды пользователь user1 теряет право вставки записи, а user2 сохраняет это право , поскольку право вставки предоставлено ему явно.

    Выполним команду

    DENY INSERT ON Товар TO stud.

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



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: