Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LECTIONS_BDBZ.doc
Скачиваний:
20
Добавлен:
16.12.2018
Размер:
1.63 Mб
Скачать

2.2. Компоненти структури безпеки

Фундаментом системи безпеки SQL Server 2000 є облікові записи(login), користувачі (user), ролі (role) і групи (group). Користувач, що підключається до SQL Server, повинен ідентифікувати себе, використовуючи обліковий запис. Після того, як клієнт успішно пройшов аутентифікацію, він дістає доступ до SQL Server. Для діставання доступу до будь-якої бази даних обліковий запис користувача (login) відображається в користувача даної бази даних (user). Об'єкт “користувач бази даних” застосовується для надання доступу до всіх об'єктів бази даних: таблицям, уявленням, процедурам, що зберігаються, і так далі. В користувача бази даних може відображатися:

  • обліковий запис Windows;

  • група Windows;

  • обліковий запис SQL Server.

Подібне відображення облікового запису необхідне для кожної бази даних, доступ до якої хоче отримати користувач. Відображення зберігаються в системній таблиці sysusers, яка є в будь-якій базі даних. Такий підхід забезпечує високий ступінь безпеки, оберігаючи від надання користувачам, що дістали доступ до SQL Server, автоматичного доступу до всіх баз даних і їх об'єктів. Користувачі баз даних, у свою чергу, можуть об'єднуватися в групи і ролі для спрощення управління системою безпеки.

За ситуації, коли обліковий запис не відображається в користувача бази даних, клієнт все ж таки може дістати доступ до бази даних під гостьовим ім'ям guest, якщо воно, зрозуміло, є в базі даних. Зазвичай користувачеві guest надається мінімальний доступ тільки в режимі читання. Але в деяких ситуаціях і цьому доступу необхідно запобігти.

Якщо в мережі є невелика кількість користувачів, то достатньо легко надати доступ кожному користувачеві персонально. Проте у великих мережах з сотнями користувачів подібний підхід займе багато часу. Набагато зручнішим і ефективнішим є підхід, коли доступ до SQL Server 2000 надається цілим групам користувачів. Якраз такий підхід можливий при аутентифікації засобами Windows, коли на рівні домена створюється декілька груп, кожна з яких призначена для вирішення специфічних завдань. На рівні SQL Server 2000 такій групі дозволяється доступ до сервера, надаються необхідні права доступу до баз даних і їх об'єктів. Досить включити обліковий запис Windows в одну з груп, і користувач отримає всі права доступу, надані цій групі. Більш того, один і той же обліковий запис може бути включений в безліч груп Windows NT, що дасть цьому обліковому запису можливість користуватися правами доступу, наданими всім цим групам. Адміністратор SQL Server 2000 винен сам вирішити, як зручніше надавати доступ до сервера: персонально кожному обліковому запису або групі в цілому.

Користувачі

Після того, як користувач пройшов аутентифікацію і отримав ідентифікатор облікового запису (login ID), він вважається зареєстрованим і йому надається доступ до сервера. Для кожної бази даних, до об'єктів якої користувачеві необхідно дістати доступ, обліковий запис користувача (login) асоціюється з користувачем (user) конкретної бази даних. Користувачі виступають як спеціальні об'єкти SQL Server, за допомогою яких визначаються всі дозволи доступу і володіння об'єктами в базі даних.

Ім'я користувача може використовуватися для надання доступу, як конкретній людині, так і цілій групі людей (залежно від типу облікового запису).

При створенні бази даних визначаються два стандартні користувачі: dbо і guest.

Якщо обліковий запис (login) не зв'язується явно з користувачем (user), останньому надається неявний доступ з використанням гостьового імені guest. Тобто всі облікові записи, що дістали доступ до SQL Server 2000, автоматично відображаються в користувачів guest у всіх базах даних. Якщо буде видалений з бази даних користувач guest, то облікові записи, що не мають явного відображення облікового запису в ім'я користувача, не зможуть дістати доступу до бази даних. Проте, guest не має автоматичного доступу до об'єктів. Власник об'єкту повинен сам вирішувати, дозволяти користувачеві guest цей доступ чи ні. Зазвичай користувачеві guest надається мінімальний доступ в режимі “тільки читання”.

Для забезпечення максимальної безпеки можна видалити користувача guest з будь-якої бази даних, окрім системних баз даних master і Tempdb. У першій з них guest використовується для виконання системних процедур, що зберігаються, звичайними користувачами, тоді як в другій дозволяє створювати будь-яким користувачам тимчасові об'єкти.

Власник бази даних (DataBase Owner, DBO) — спеціальний користувач, що володіє максимальними правами в базі даних. Будь-який член ролі sysadmin автоматично відображається в користувача dbo. Якщо користувач, що є членом ролі sys admin, створює який-небудь об'єкт, то власником цього об'єкту призначається не даний користувач, а dbo. Наприклад, якщо Liliya, член адміністративної групи, створює таблицю Таblеa, то повне ім'я таблиці буде не Liliya.ТаblеA, а dbo.ТаblеA. В той же час, якщо Liliya, не будучи учасником ролі сервера sysadmin, полягає в ролі власника бази даних db_owner, то ім'я таблиці буде LiIiуа.ТаblеA.

Користувача dbo не можна видалити.

Для пов'язання облікового запису (login) з певним ім'ям користувача (user) можна скористатися наступною процедурою, що зберігається:

sp_adduser [@loginame =] 'login' [,[@name_in_db =] 'user'] [.[@grpname =] 'role']

Нижче дається пояснення використовуваних в ній параметрів:

  • login — ім'я облікового запису, який необхідно пов'язати з ім'ям користувача бази даних;

  • user — ім'я користувача бази даних, з яким асоціюється даний обліковий запис (у базі даних заздалегідь не повинно існувати користувача з вказаним ім'ям);

  • role — цей параметр визначає роль, в яку даний користувач буде включений (докладніше про ролі буде розказано пізніше). Процедура sp_grantdbaccess, що зберігається, дозволяє відобразити обліковий запис Windows NT в ім'я користувача:

sp_grantdbaccess [@loginame =] 'login' [,[@name_in_db =] 'user']

Параметри означають наступне:

  • login — ім'я облікового запису користувача або групи користувачів Windows NT, яким необхідно надати доступ до бази даних. Ім'я повинне забезпечуватися посиланням на домен, в якому обліковий запис визначений. Вказаному обліковому запису не обов'язково повинен бути наданий персональний доступ до SQL Server. Цілком можливо, що з'єднання з сервером встановлюється унаслідок членства в групі Windows NT, яка має доступ до сервера;

  • user — ім'я користувача бази даних, з яким асоціюється даний обліковий запис.

Користувач, який створює об'єкт в базі даних, наприклад таблицю, процедуру, що зберігається, або уявлення, стає власником об'єкту. Власник об'єкту (database object owner) має всі права доступу до створеного ним об'єкту. Щоб користувач міг створити об'єкт, власник бази даних (dbo) повинен надати користувачеві відповідні права. Повне ім'я створюваного об'єкту включає ім'я користувача, що створив його. Якщо користувач хоче звернутися до таблиці, використовуючи тільки її ім'я і не указуючи власника, SQL Server застосовує наступний алгоритм пошуку:

  1. Шукається таблиця, створена користувачем, що виконує запит;

  2. Якщо таблиця не знайдена, то шукається таблиця, створена власником бази даних (dbo).

Допустимо, користувач Liss намагається звернутися до таблиці Liliya.TableA, просто використовуючи ім'я TablеА. Оскільки таблиця, створена Liliya, не відповідає ні першому, ні другому критерію пошуку, то таблиця TableA знайдена не буде і користувач отримає повідомлення про помилку. Для діставання доступу до таблиці необхідно ввести ім'я, що включає власника об'єкту, тобто Liliya.TableA.

Власник об'єкту не має ніякого спеціального пароля або особливих прав доступу. Він неявно має повний доступ, але повинен явно надати доступ іншим користувачам.

SQL Server дозволяє передавати права володіння від одного користувача іншому. Щоб видалити власника об'єкту з бази даних, спочатку необхідно видалити всі об'єкти, які він створив, або передати права на їх володіння іншому користувачеві. Для цього можна використовувати процедуру sp_changeobjectowner, що має наступний синтаксис, що зберігається:

sp_changeobjectowner [ @objname = ] 'object', [ (Pnewowner = ] 'owner'

Тут за допомогою першого параметра указується ім'я об'єкту, а за допомогою другого — ім'я користувача, який стане новим власником вказаного об'єкту.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]