Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Вопросы и ответы по MS SQL Server" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
MS SQL Server - дело тонкое...
Информационный Канал Subscribe.Ru |
#137<< #138 |
СОДЕРЖАНИЕ
Безопасность Microsoft SQL Server 2000 (ПРОДОЛЖЕНИЕ) По материалам статьи Richard Waymire и Ben Thomas: Microsoft SQL Server 2000 Security
1. Введение 2.15. Обеспечение доступа к базе данных
Успешная регистрация на SQL Server 2000 не даёт пользователю автоматически доступ ко всем базам данных. Что бы
пользователь мог работать с базой данных, ему нужно предоставить на это соответствующие разрешения. /* Grant access to Bob. */ exec sp_grantdbaccess 'REDMOND\Bob' /* Grant access to Wendy, referring to her by first name within this database. */ exec sp_grantdbaccess 'REDMOND\WendyH', 'Wendy'
Требуется внести только одно изменение в этот скрипт, чтобы дать права для не доверительного подключения клиента.
Вместо имени пользователя и домена, используйте имя пользователя, которое использует SQL Server 2000 для
подтверждения его подлинности. ' Declare variables. Dim oServer As SQLDMO.SQLServer Dim oUser As SQLDMO.User ' Create a server object and connect. Set oServer = CreateObject("SQLDMO.SQLServer") oServer.Connect ("ServerNAME") ' Create the User object. Set oUser = CreateObject("SQLDMO.User") ' Set the appropriate properties. oUser.Name = "Bob" oUser.Login = "REDMOND\Bob" ' Add the User object to the servers Users collection. oServer.Databases("pubs").Users.Add oUser 2.15.1. Обеспечение доступа к объектам базы данных Разрешения можно предоставлять ролям и пользователям и они могут быть назначены для предоставления права пользователям выполнять инструкции и для обеспечения возможности обращения к объектам базы данных. Разрешения для операторов ограничивают возможность исполнения инструкций: CREATE DATABASE, CREATE TABLE или CREATE FUNCTION. Разрешения на объекты ограничивают доступ к таблицам, представлениям, определяемым пользователем функциям или хранимым процедурам. Они зависят от типа объекта, например, для таблиц могут быть установлены разрешения на SELECT, INSERT, UPDATE, DELETE и REFERENCES, в то время как для хранимых процедур устанавливается разрешения EXECUTE. 2.15.2. Определяемые пользователем роли базы данных
В идеале, в ролях нет необходимости. Это возможно в такой среде, где все пользователи подключаются посредством
Windows Authentication Mode к SQL Server 2000, работающему под управлением Windows NT 4.0 или Windows 2000.
Администратор базы данных может попросить администратора Windows разместить всех пользователей с определёнными
требованием доступа к данным (роль) в одну группу Windows, и тогда он предоставит необходимые разрешения
непосредственно для этой группы Windows. /* Add role for Telephone Operators. */ exec sp_addrole "TelephoneOperators" Следующий пример показывает, как роли могут быть созданы в коде Visual Basic: ' Declare variables. Dim oServer As SQLDMO.SQLServer Dim oDbRole As SQLDMO.DatabaseRole ' Create a server object and connect. Set oServer = CreateObject("SQLDMO.SQLServer") oServer.Connect ("ServerNAME") ' Create the Database Role object. Set oDbRole = CreateObject("SQLDMO.DatabaseRole") ' Set the appropriate properties. oDbRole.Name = "TelephoneOperators" ' Add the Role object to the servers Role collection. oServer.Databases("pubs").DatabaseRoles.Add oDbRole
После того, как создана определяемая пользователем роль базы данных, в неё могут быть добавлены пользователи,
группы или другие роли. Роли могут быть вложенными, хотя рекурсия не допускается. /* Add a Windows user to the TelephoneOperators role. */ exec sp_addrolemember "TelephoneOperators", "REDMOND\Bob" /* Add a Windows group to the TelephoneOperators role. */ exec sp_addrolemember "TelephoneOperators", "REDMOND\Sales" /* Add HelpDeskOperators role to TelephoneOperators role. */ exec sp_addrolemember "TelephoneOperators", "HelpDeskOperators" И снова с SQL-DMO: ' Declare variables. Dim oServer As SQLDMO.SQLServer ' Create a server object and connect. Set oServer = CreateObject("SQLDMO.SQLServer") oServer.Connect ("MSNZBENTHOM") ' Use with statement for code legibility. With oServer.Databases("pubs").DatabaseRoles("TelephoneOperators") ' Add the Windows user to the TelehoneOperators role collection. .AddMember ("REDMOND\Bob") ' Add the Windows group to the TelehoneOperator's role collection .AddMember ("REDMOND \Sales") ' Add the HelpDeskOperators role to TelehoneOperators role collection. .AddMember ("HelpDeskOperators") End With Система разрешения SQL Server 2000 основана на такой же модели, которая формирует разрешения в Windows. Если пользователь является членом ролей sales, marketing и research (теперь возможны множественные членства в группах), пользователь получает сумму соответствующих разрешений от каждой роли. Например, если sales имеют на таблицы разрешение SELECT, marketing имеет разрешение INSERT, а research имеет разрешение UPDATE; пользователь получит сумму разрешений: SELECT, INSERT и UPDATE. Однако, как и с Windows, если для одной из ролей, членом которой пользователь является, было отклонено какое-нибудь разрешение на объекты (например SELECT), пользователь будет неспособен осуществлять такие операции над объектами. Наиболее приоритетным ограничительным разрешением является Deny. 2.15.4. Предоставление и отрицание разрешений для пользователей и ролей
Разрешения в базе данных всегда предоставляются пользователям базы, ролям и пользователям или группам Windows, но
они никогда не предоставляются логинам SQL Server 2000. Для предоставления разрешений пользователям или ролям базы
данных используются методы: Grant - предоставление разрешений, Deny - отрицающие разрешение и Revoke - отменяющее
разрешение. /* Grant permissions to SELECT. */ GRANT SELECT ON authors TO Bob, [REDMOND\Jane] GO /* Grant permissions to INSERT. */ GRANT INSERT ON titles TO [REDMOND\Jane] GO
Предыдущий пример показывает, как работает инструкция Grant при предоставлении разрешения пользователю базы данных
(Боб) и при предоставлении разрешения пользователю Windows (Джейн). ' Declare variables. Dim oServer As SQLDMO.SQLServer ' Create a server object and connect. Set oServer = CreateObject("SQLDMO.SQLServer") oServer.Connect ("ServerNAME") ' Grant Jane and Bob permissions to select from the authors table. oServer.Databases("pubs").Tables("authors").Grant SQLDMOPriv_Select, "Bob" oServer.Databases("pubs").Tables("authors").Grant SQLDMOPriv_Select, _ "[REDMOND\Jane] ' Grant Jane permissions to select from the authors table. oServer.Databases("pubs").Tables("authors").Grant SQLDMOPriv_Select, _ "[REDMOND\Jane]" В предыдущих примерах, есть небольшое различие между предоставлением доступа пользователю с полностью квалифицированным именем домена, и предоставлением доступа пользователю, который уже имеет разрешение на непосредственный доступ к базе данных. Следующие примеры используют только существующих в базе данных пользователей. Представленный ниже пример на Transact-SQL показывает, как пользователю может быть отклонено разрешение SELECT: /* Deny permissions to SELECT. */ DENY SELECT ON authors TO Bob GO И снова Visual Basic: ' Declare variables. Dim oServer As SQLDMO.SQLServer ' Create a server object and connect. Set oServer = CreateObject("SQLDMO.SQLServer") oServer.Connect ("ServerNAME") ' Deny Bob permissions to select from authors table. oServer.Databases("pubs").Tables("authors").Deny SQLDMOPriv_Select, "Bob" Пример на Transact-SQL, который показывает отмену разрешения для пользователя: /* Revoke permissions to SELECT. */ REVOKE SELECT ON authors FROM Bob GO Here is the Visual Basic code: ' Declare variables. Dim oServer As SQLDMO.SQLServer ' Create a server object and connect. Set oServer = CreateObject("SQLDMO.SQLServer") oServer.Connect ("ServerNAME") ' Revoke Bob permissions to select from the authors table. oServer.Databases("pubs").Tables("authors").Revoke SQLDMOPriv_Select, "Bob"
Правильное понимание функционирования цепочек владения является критически важным для реализации безопасности SQL
Server 2000. Концепция цепочек владения вступает в силу, когда проверены разрешения на объекты. Например, когда
пользователь обращается к представлению, разрешение на представление должно быть проверено, но возникает вопрос:
должны ли проверятся разрешения на исходные для представления таблицы? ПРОДОЛЖЕНИЕ СЛЕДУЕТ Отечественные статьи
Процесс разработки
программного обеспечения ICONIX
Новые технические статьи Microsoft
Support
WebCast: Microsoft SQL Server 7.0 and SQL Server 2000 Indexes
Cluster That Index!
Самые популярные темы недели
О Data
Controls в Delphi
SqlRunXX.MSI Материалы семинара: Применение CASE средств в процессе разработки и сопровождения приложений и баз данных
Подпишитесь на новую рассылку: Вопросы и ответы по Microsoft SQL Server
Автор рассылки: Сергей Кошкин
Архив выпусков:
1. Для чего вообще нужен оператор JOIN? (05.03.2003)
|
#137<< #138 |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||