SlideShare a Scribd company logo
1 of 7
Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Създаване на потребители и администриране на разрешения чрез Transact SQL 1 от 7
Тема 24. Създаване на потребители и администриране на разрешения
чрез Transact SQL
инж. Красимир Дойчев kdoychev@gmail.com
Целта на настоящия урок е да се научите да създавате и премахвате потребители и
роли и да администрирате разрешенията чрез Transact SQL.
1. Създаване и премахване на потребител на Windows от командния ред
Командата за създаване на потребител е със следния синтаксис:
net user име /add
а за премахване:
net user име /delete
Пример: Влиза се в Windows XP с администраторски права. Стартира се Command
Prompt и в прозореца се написва:
net user manager01 /add
Натиска се клавиш Enter. Появява се съобщение “The command completed
successfully” (командата е завършена успешно). В резултат се създава потребител с име
manager01.
Командата net user manager01 / delete ще изтрие потребителя с име manager01.
2. Конфигуриране автентикацията на потребител
За да може един потребител да се свърже със SQL Server, към сървъра трябва да се
добави акаунт на системата за сигурност и да му се предостави достъп до SQL Server.
Процесът на удостоверяване на правото за достъп до екземпляра на SQL Server се нарича
автентикация (authentication). Възможно е да се използва или само Windows authentication
или смесена автентикация - Windows authentication и SQL Server authentication.
2.1. Предоставяне и отказване право на достъп на акаунти на Windows
За да се предостави Windows authentication чрез Transact SQL се използва системната
съхранена процедура sp_grantlogin. За отказване достъпа до сървъра без да се изтрива
акаунта на Windows от SQL Server се използва sp_denylogin. За изтриване на акаунт на
Windows от SQL Server се използва sp_revokelogin.
Пример:
1. Добавяне на потребители и предоставяне правото на достъп:
 потребителя User01 в DOMAIN01
 потребителя User01 на компютъра SQLSERVER01
 предварително дефинираната група Power users
В Query Analyzer се записва:
EXEC sp_grantlogin @loginame = ‘DOMAIN01user01’
EXEC sp_grantlogin @loginame = ‘SQLSERVER01user0l’
EXEC sp_grantlogin @loginame = ‘BUILTINpower users’
2. Отказване на членовете на предварително дефинираната група Power Users правото
да се свързват със SQL, Server:
Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Създаване на потребители и администриране на разрешения чрез Transact SQL 2 от 7
EXEC sp_denylogin @loginame = 'BUILTINpower users'
3. Премахване на SQLSERVER01 User01:
EXEC sp_revokelogin @loginame = 'SQLSERVER01User01'
2.2. Добавяне на логин ID на SQL Server
Използвайте системната съхранена процедура sp_addlogin за създаване и добавяне на
логин ID на SQL Server и предоставяне на право на достъп за този логин ID. Написаният в
следващия пример код показва как да използвате sp_addlogin, за да създадете и добавите
User02 с парола password02 и да му предоставите право на достъп:
sp_addlogin
@loginame = 'user02',
@passwd = 'password02'
Не можете да откажете на един логин ID на SQL Server правото на автентикация на
SQL Server. За да направите това, трябва да изтриете съответния логин ID. Използвайте
sp_droplogin за изтриване на логин ID на SQL Server.
2.3. Показване на всички акаунти, които имат право да се свържат с SQL Server
sp_helplogins
3. Конфигуриране оторизацията на потребител
За да се осъществи достъп до бази данни в SQL Server не е достатъчно само да е
извършена автентикация. Необходимо е също да се осъществи оторизация - на
потребителите, на които е предоставен достъп до екземпляра на SQL Server, да се
предостави достъп до базата данни директно, чрез роля или като гост (guest), ако гостът има
права за достъп.
Както при автентикацията, системните съхранени процедури могат да се използват за
управляване на оторизацията при SQL Server. Използвайте sp_grantdbaccess и
sp_revokedbaccess за добавяне или отнемане на достъп до базата данни от акаунт на
системата за сигурност. Тези системни съхранени процедури работят с всички валидни
акаунти на системата за сигурност, акаунти на Windows и логин ID на SQL Server.
Предоставянето на достъп се нарича също така асоцииране (mapping) на даден акаунт с база
данни.
3.1. Предоставяне достъп на акаунт до базата данни
Написаният в следния пример код показва как да използвате sp_grantdbaccess, за да
асоциирате достъпа до база данни Pubs със следните потребители: User0l в DOMAIN01,
User0l в сървъра, на който е стартиран SQL Server (SQLSERVER01), логин ID на User0l и
локалната група Power Users:
USE pubs
EXEC sp_grantdbaccess @loginame = 'DOMAIN01User01'
EXEC sp_grantdbaccess @loginame = 'SQLSERVER01User01',
@name_in_db = 'LocalUser0l'
EXEC sp_grantdbaccess @loginame = 'user0l',
@name_in_db = 'SQLUser0l'
EXEC sp_grantdbaccess @loginame = 'BUILTINpower users'
Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Създаване на потребители и администриране на разрешения чрез Transact SQL 3 от 7
Обърнете внимание, че за SQLSERVER01 User01 и за SQL логин ID на User0l беше
зададен @name_in_db. Параметърът @name__in_db ви позволява да зададете различно име
като псевдоним на акаунта на системата за сигурност. Ако не е зададено @name_in_db,
името на акаунта на системата за сигурност ще бъде псевдонимът на името на потребителя.
3.2. Премахване достъп на акаунт до базата данни
Използвайте sp_revokedbaccess, за да премахнете акаунт на системата за сигурност от
дадена база данни. Не можете да изтриете даден логин ID в SQL Server, докато не изпълните
sp_revokedbacces за всички бази данни, за които са му предоставени привилегии. Обаче
можете да изтривате акаунт на Windows, без да е необходимо първо да премахвате всички
асоциации към бази данни. Написаният в следващия пример код показва как да използвате
sp_revokedbaccess; за да премахнете User0l с псевдоним SQLUser0l от база данни Pub
USE pubs
EXEC sp_revokedbaccess @name_in_db = SQLUser0l
3.3. Показване списък на оторизираните потребители
sp_helpuser
4. Администриране на роли
Ролите облекчават администрирането на достъпа до базите данни, като позволяват на
потребители да стават членове на роли и да наследяват техните разрешения и забрани върху
обектите на БД. По този начин не е необходимо на всеки потребител да се задават
индивидуално разрешенията, а е достатъчно само той да се присъедини към съответната
роля.
4.1. Добавяне и изтриване на роли
Използвайте системната съхранена процедура sp_addrole или някой инструмент,
извикван от командния ред, например osql, за да добавите стандартна роля към база данни от
Query Analyzer. Системната съхранена процедура sp_addrole съдържа входни параметри,
чрез които се задава името на ролята (и, по желание, собственикът на ролята). Ако не
определите собствеността върху ролята, по подразбираш за собственик се приема този,
който създава ролята. В следващия пример се добавя роля, наречена Role0l, към база данни
Pubs:
USE pubs
EXEC sp_addrole @rolename = 'role0l'
Използвайте системната съхранена процедура sp_droprole, за да премахнете дадена
дефинирана от потребителя стандартна роля. В следния пример се премахва роля, наречена
Role0l:
USE pubs
EXEC sp_droprole @rolename = 'role01’
4.2. Администриране на членството в роли
Използвайте системната съхранена процедура sp_addrolemember, за да добавите
членове към една дефинирана от потребителя стандартна роля или към фиксирана роля за
база данни. Използвайте sp_addsrvrolemember, за да добавите акаунт на системата за
Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Създаване на потребители и администриране на разрешения чрез Transact SQL 4 от 7
сигурност към фиксирана роля за сървър. Системната съхранена процедура
sp_addrolemember използва @rolename и @membername като входни параметри, a
sp_addsrvrolemember използва @loginame и @rolename като входни параметри. В следващия
пример се добавят Role02, BUILTINPower Users и User0l към Role0l (дефинирана от
потребителя стандартна роля):
USE pubs
EXEC sp__addrolemember @rolename = 'role01',
@membername = 'role02' <
EXEC sp_addrolemember @rolename = 'role01',
@membername = 'BUILTINpower users'
EXEC sp_addrolemember @rolename = 'role01',
@membername = 'user01’
За входния параметър @membername трябва да зададете асоциираното име. Например
ако псевдонимът на група Power Users в базата данни е PowerU, тогава стойността на
@membername e poweru. За да бъде направен член на роля, всеки потребител или група
трябва да бъде асоцииран с базата данни.
5. Конфигуриране разрешенията на потребител
Използвайте конструкции GRANT, REVOKE и DENY, за да администрирате
разрешения за обекти и конструкции от Query Analyzer.
5.1. Конструкция GRANT
Когато използвате GRANT, трябва да укажете кое е разрешението (или разрешенията)
и на кого ще ги присвоявате. Използвайте ключовата дума ALL, за да присвоите всички
валидни разрешения за обекти или конструкции. Когато присвоявате разрешения за обекти,
трябва да укажете също така и върху какво се прилагат разрешенията за обекти. Подобно
указание не е необходимо при разрешенията за конструкции, тъй като те се прилагат върху
база данни, а не върху отделен обект в базата. По желание можете да укажете клауза WITH
GRANT OPTION, за да позволите на съответния акаунт на системата за сигурност да
предоставя на други същото разрешение, което му е било предоставено. Използвайте
ключовата дума AS, за да укажете акаунт на системата за сигурност (група или роля) в
текущата база данни, който е оторизиран да изпълнява конструкция GRANT. Ако
разрешенията върху даден обект се предоставят на група или роля, трябва да използвате
ключовата дума AS, за да укажете групата или ролята, оторизирани да присвояват
разрешения на други. Системата за сигурност на SQL Server ще направи проверка дали сте
член на посочената група или роля, преди да ви позволи да използвате конструкция GRANT.
Основните клаузи в конструкция GRANT при присвояване на разрешения за
конструкции са обобщени по следния начин:
GRANT ALL | изрази за разрешения TO имена на акаунти
Основните клаузи в конструкция GRANT при присвояване на разрешения за обекти
са обобщени по следния начин:
GRANT ALL | разрешения за обекти (колони) ON име_таблица  име_изглед | ON
име_таблица  име_изглед (колони) ON съхранена_процедура  потребителска_функция TO
имена WITH GRANT OPTION AS име_група  име_роля
Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Създаване на потребители и администриране на разрешения чрез Transact SQL 5 от 7
Ако искате да предоставите на един или повече акаунта на системата за сигурност
всички валидни разрешения за обекти или конструкции, използвайте ключовата дума ALL,
както е показано в следващия пример:
USE pubs
GRANT ALL
TO public
На ролята Public са присвоени всички възможни разрешения за конструкции върху
база данни Pubs. Резултатът от това присвояване е, че на всички оторизирани потребители е
позволено да задават всяко разрешение за конструкция спрямо базата данни. Не е много
типично да се прави подобно присвояване, но примерът демонстрира как да се отвори базата
данни за всички оторизирани потребители. Ако асоциирате специалния акаунт Guest с база
данни Pubs, на всички автентицирани потребители, които не са асоциирани с база данни
Pubs, също се предоставят пълни разрешения за конструкции, защото акаунтът Guest е член
на ролята Public.
В следващата конструкция е разрешено разглеждането и обновяването на таблица
Titles от база данни pubs за потребителя user01.
USE pubs
GRANT UPDATE, SELECT
ON dbo. Titles
TO user01
Написаният в следния пример код показва как да присвоите разрешения за обекти
UPDATE и SELECT само върху колони:
USE pubs
GRANT UPDATE, SELECT
ON dbo.sales (ord_date, ord_num, qty)
TO user01
Можете да смесвате разрешения за колони и разрешения за таблици, но така, че
последното указано разрешение да се отнася за колона. Трябва да проверите дали
последното разрешение за обект е допустимо разрешение за колона (SELECT или UPDATE),
както е показано в следващия пример:
USE pubs
GRANT INSERT, DELETE, UPDATE, SELECT (ord_date, ord_num, qty)
ON dbo.sales
TO user01
Ha User01 са предоставени разрешения INSERT, DELETE и UPDATE за таблица
dbo.sales и разрешение SELECT за колони Ord_Date, Ord_Num и Qty. Обърнете внимание, че
името на таблицата е уточнено с името на собственика, dbo. Тази спецификация е
опционална, но е добре да придобиете този навик при кодиране, защото в базата данни може
да има и други таблици със същото име, но с различен собственик.
Единственото валидно разрешение за обект, което може да се приложи за съхранена
процедура, е EXECUTE. В следния пример EXECUTE се присвоява на Power Users за
разширената съхранена процедура xp_cmdshell:
USE master
Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Създаване на потребители и администриране на разрешения чрез Transact SQL 6 от 7
GRANT EXEC
ON xp_cmdshell
TO [BUILTINpower users]
Разширената съхранена процедура xp_cmdshell се намира в база данни Master.
Следователно Master трябва да стане текущата база данни. За обектите в текущата база
данни можете само да предоставяте, отнемате или отказвате разрешения.
Забележка Повече информация ще откриете в описанието на конструкция GRANT от
SQL Server Books Online.
5.2. Конструкция REVOKE
Използвайте конструкция REVOKE, за да премахвате от даден акаунт на системата за
сигурност предоставени преди това разрешения. Форматът на конструкция REVOKE е
подобен на формата на конструкция GRANT с някои изключения. Ключовата дума ТО в
конструкция GRANT се замества с FROM, когато отнемате разрешени: за конструкции, и
може да бъде или ТО, или FROM, когато отнемате разрешенията за обекти. Синтаксисът за
отнемане на разрешенията за обекти включва опционалната ключова дума CASCADE и
клауза GRANT OPTION FOR. Използвайте клауза GRANT OPTION FOR, за да отнемете
WITH GRANT OPTION, присвоено на съответния акаунт на системата за сигурност.
Използвайте ключовата дума CASCADE за отнемане на разрешенията, които са
предоставени на зададения акаунт на системата за сигурност и на всеки друг акаунт, на
който зададеният акаунт е предоставил разрешения. Трябва да зададете както GRANT
OPTION FOR, така и CASCADE, за да отнемете състоянието на разрешение Grant, присвоено
чрез акаунта системата за сигурност на други акаунти на тази система. В следващия пример
се отнема разрешение EXEC от User01 и от всички други потребители, на които User01 е
присвоил разрешение EXEC
USE master
REVOKE EXEC
ON xp_cmdshell
FROM user0l
CASCADE
Изпълнете следната системна съхранена процедура, за да разгледате текущите
разрешения на разширената съхранена процедура:
EXEC sp_helprotect 'xp_cmdshell'
5.3. Конструкция DENY
Използвайте конструкция DENY, за да забраните явно на акаунт на системата за
сигурност зададените привилегии и да попречите на този акаунта да наследява разрешението
чрез група или членство в роли. Форматът на конструкция DENY е аналогичен на формата
на конструкции GRANT и REVOKE. Както при конструкция GRANT, ключовата дума ТО
определя за кого важи съответната конструкция. Конструкция DENY може да включва
ключовата дума CASCADE за явно отказване на разрешения, които са били предоставени на
зададения акаунт на системата за сигурност, и за отказване на разрешенията, предоставени
от съответния акаунт на други акаунти. В следния пример се отказват разрешенията за
конструкции на един логин ID на SQL Server и на една група:
Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Създаване на потребители и администриране на разрешения чрез Transact SQL 7 от 7
USE pubs
DENY CREATE TABLE, CREATE VIEW, BACKUP DATABASE, BACKUP LOG
TO user0l, [BUILTINpower users]
5.4. Показване на разрешенията
sp_helpprotect @name=NULL, @username=’public’
Тази конструкция показва списък на разрешенията, присвоени на ролята Public. Тази
роля съдържа всички оторизирани потребители, така че тя поставя началото на йерархията
на сигурността на базата данни.
ЛИТЕРАТУРА
1. Microsoft. MSCE Microsoft SQL Server 2000 Проектиране и реализация на бази данни
Training kit. С., Софтпрес, 2001.
2. SQL Server Books Online

More Related Content

Similar to 24 sazdavane na potrebiteli i zadavane na razreshenia

Konspekt prilojen mrejovi-software-12kl
Konspekt prilojen mrejovi-software-12klKonspekt prilojen mrejovi-software-12kl
Konspekt prilojen mrejovi-software-12klIvan Peev
 
Защита при създаването на PHP-приложения
Защита при създаването на PHP-приложенияЗащита при създаването на PHP-приложения
Защита при създаването на PHP-приложенияNikolay Milkov
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLDAVID Academy
 
Web applications with Catalyst BG
Web applications with Catalyst BGWeb applications with Catalyst BG
Web applications with Catalyst BGsvilen.ivanov
 
ИнтеRESTни уеб услуги
ИнтеRESTни уеб услугиИнтеRESTни уеб услуги
ИнтеRESTни уеб услугиsvilen.ivanov
 
Drupal security lecture
Drupal security lectureDrupal security lecture
Drupal security lectureslide9991
 
WindowsAzure&amp;NoSQL@SQLSaturday#152
WindowsAzure&amp;NoSQL@SQLSaturday#152WindowsAzure&amp;NoSQL@SQLSaturday#152
WindowsAzure&amp;NoSQL@SQLSaturday#152Miroslav Lessev
 
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...Средства на VSTS за управление на проекти, версии на системата, извеждане на ...
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...Yosifov
 

Similar to 24 sazdavane na potrebiteli i zadavane na razreshenia (13)

Php sec
Php secPhp sec
Php sec
 
Konspekt prilojen mrejovi-software-12kl
Konspekt prilojen mrejovi-software-12klKonspekt prilojen mrejovi-software-12kl
Konspekt prilojen mrejovi-software-12kl
 
Защита при създаването на PHP-приложения
Защита при създаването на PHP-приложенияЗащита при създаването на PHP-приложения
Защита при създаването на PHP-приложения
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
 
Web applications with Catalyst BG
Web applications with Catalyst BGWeb applications with Catalyst BG
Web applications with Catalyst BG
 
B9 t9 db_my_sql
B9 t9 db_my_sqlB9 t9 db_my_sql
B9 t9 db_my_sql
 
B9 t9 db_my_sql
B9 t9 db_my_sqlB9 t9 db_my_sql
B9 t9 db_my_sql
 
Drupal Security
Drupal SecurityDrupal Security
Drupal Security
 
ИнтеRESTни уеб услуги
ИнтеRESTни уеб услугиИнтеRESTни уеб услуги
ИнтеRESTни уеб услуги
 
Drupal security lecture
Drupal security lectureDrupal security lecture
Drupal security lecture
 
WindowsAzure&amp;NoSQL@SQLSaturday#152
WindowsAzure&amp;NoSQL@SQLSaturday#152WindowsAzure&amp;NoSQL@SQLSaturday#152
WindowsAzure&amp;NoSQL@SQLSaturday#152
 
Tema13
Tema13Tema13
Tema13
 
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...Средства на VSTS за управление на проекти, версии на системата, извеждане на ...
Средства на VSTS за управление на проекти, версии на системата, извеждане на ...
 

More from Ivan Peev

19 saedinenia na tablici
19 saedinenia na tablici19 saedinenia na tablici
19 saedinenia na tabliciIvan Peev
 
17 klauzi upraznenia
17 klauzi   upraznenia17 klauzi   upraznenia
17 klauzi uprazneniaIvan Peev
 
23a sazdavane na izgledii v sql server upraznenie
23a sazdavane na izgledii v sql server   upraznenie23a sazdavane na izgledii v sql server   upraznenie
23a sazdavane na izgledii v sql server upraznenieIvan Peev
 
22a sazdavane na bd i tablici v sql server upraznenie
22a sazdavane na bd i tablici v sql server   upraznenie22a sazdavane na bd i tablici v sql server   upraznenie
22a sazdavane na bd i tablici v sql server upraznenieIvan Peev
 
21a manipulirane na danni v sql server upraznenie
21a manipulirane na danni v sql server   upraznenie21a manipulirane na danni v sql server   upraznenie
21a manipulirane na danni v sql server upraznenieIvan Peev
 
21 manipulirane na danni v sql server
21 manipulirane na danni v sql server21 manipulirane na danni v sql server
21 manipulirane na danni v sql serverIvan Peev
 
Block diagrame 1
Block diagrame 1Block diagrame 1
Block diagrame 1Ivan Peev
 

More from Ivan Peev (7)

19 saedinenia na tablici
19 saedinenia na tablici19 saedinenia na tablici
19 saedinenia na tablici
 
17 klauzi upraznenia
17 klauzi   upraznenia17 klauzi   upraznenia
17 klauzi upraznenia
 
23a sazdavane na izgledii v sql server upraznenie
23a sazdavane na izgledii v sql server   upraznenie23a sazdavane na izgledii v sql server   upraznenie
23a sazdavane na izgledii v sql server upraznenie
 
22a sazdavane na bd i tablici v sql server upraznenie
22a sazdavane na bd i tablici v sql server   upraznenie22a sazdavane na bd i tablici v sql server   upraznenie
22a sazdavane na bd i tablici v sql server upraznenie
 
21a manipulirane na danni v sql server upraznenie
21a manipulirane na danni v sql server   upraznenie21a manipulirane na danni v sql server   upraznenie
21a manipulirane na danni v sql server upraznenie
 
21 manipulirane na danni v sql server
21 manipulirane na danni v sql server21 manipulirane na danni v sql server
21 manipulirane na danni v sql server
 
Block diagrame 1
Block diagrame 1Block diagrame 1
Block diagrame 1
 

24 sazdavane na potrebiteli i zadavane na razreshenia

  • 1. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич www.pglomonosov.org Красимир Дойчев Създаване на потребители и администриране на разрешения чрез Transact SQL 1 от 7 Тема 24. Създаване на потребители и администриране на разрешения чрез Transact SQL инж. Красимир Дойчев kdoychev@gmail.com Целта на настоящия урок е да се научите да създавате и премахвате потребители и роли и да администрирате разрешенията чрез Transact SQL. 1. Създаване и премахване на потребител на Windows от командния ред Командата за създаване на потребител е със следния синтаксис: net user име /add а за премахване: net user име /delete Пример: Влиза се в Windows XP с администраторски права. Стартира се Command Prompt и в прозореца се написва: net user manager01 /add Натиска се клавиш Enter. Появява се съобщение “The command completed successfully” (командата е завършена успешно). В резултат се създава потребител с име manager01. Командата net user manager01 / delete ще изтрие потребителя с име manager01. 2. Конфигуриране автентикацията на потребител За да може един потребител да се свърже със SQL Server, към сървъра трябва да се добави акаунт на системата за сигурност и да му се предостави достъп до SQL Server. Процесът на удостоверяване на правото за достъп до екземпляра на SQL Server се нарича автентикация (authentication). Възможно е да се използва или само Windows authentication или смесена автентикация - Windows authentication и SQL Server authentication. 2.1. Предоставяне и отказване право на достъп на акаунти на Windows За да се предостави Windows authentication чрез Transact SQL се използва системната съхранена процедура sp_grantlogin. За отказване достъпа до сървъра без да се изтрива акаунта на Windows от SQL Server се използва sp_denylogin. За изтриване на акаунт на Windows от SQL Server се използва sp_revokelogin. Пример: 1. Добавяне на потребители и предоставяне правото на достъп:  потребителя User01 в DOMAIN01  потребителя User01 на компютъра SQLSERVER01  предварително дефинираната група Power users В Query Analyzer се записва: EXEC sp_grantlogin @loginame = ‘DOMAIN01user01’ EXEC sp_grantlogin @loginame = ‘SQLSERVER01user0l’ EXEC sp_grantlogin @loginame = ‘BUILTINpower users’ 2. Отказване на членовете на предварително дефинираната група Power Users правото да се свързват със SQL, Server:
  • 2. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич www.pglomonosov.org Красимир Дойчев Създаване на потребители и администриране на разрешения чрез Transact SQL 2 от 7 EXEC sp_denylogin @loginame = 'BUILTINpower users' 3. Премахване на SQLSERVER01 User01: EXEC sp_revokelogin @loginame = 'SQLSERVER01User01' 2.2. Добавяне на логин ID на SQL Server Използвайте системната съхранена процедура sp_addlogin за създаване и добавяне на логин ID на SQL Server и предоставяне на право на достъп за този логин ID. Написаният в следващия пример код показва как да използвате sp_addlogin, за да създадете и добавите User02 с парола password02 и да му предоставите право на достъп: sp_addlogin @loginame = 'user02', @passwd = 'password02' Не можете да откажете на един логин ID на SQL Server правото на автентикация на SQL Server. За да направите това, трябва да изтриете съответния логин ID. Използвайте sp_droplogin за изтриване на логин ID на SQL Server. 2.3. Показване на всички акаунти, които имат право да се свържат с SQL Server sp_helplogins 3. Конфигуриране оторизацията на потребител За да се осъществи достъп до бази данни в SQL Server не е достатъчно само да е извършена автентикация. Необходимо е също да се осъществи оторизация - на потребителите, на които е предоставен достъп до екземпляра на SQL Server, да се предостави достъп до базата данни директно, чрез роля или като гост (guest), ако гостът има права за достъп. Както при автентикацията, системните съхранени процедури могат да се използват за управляване на оторизацията при SQL Server. Използвайте sp_grantdbaccess и sp_revokedbaccess за добавяне или отнемане на достъп до базата данни от акаунт на системата за сигурност. Тези системни съхранени процедури работят с всички валидни акаунти на системата за сигурност, акаунти на Windows и логин ID на SQL Server. Предоставянето на достъп се нарича също така асоцииране (mapping) на даден акаунт с база данни. 3.1. Предоставяне достъп на акаунт до базата данни Написаният в следния пример код показва как да използвате sp_grantdbaccess, за да асоциирате достъпа до база данни Pubs със следните потребители: User0l в DOMAIN01, User0l в сървъра, на който е стартиран SQL Server (SQLSERVER01), логин ID на User0l и локалната група Power Users: USE pubs EXEC sp_grantdbaccess @loginame = 'DOMAIN01User01' EXEC sp_grantdbaccess @loginame = 'SQLSERVER01User01', @name_in_db = 'LocalUser0l' EXEC sp_grantdbaccess @loginame = 'user0l', @name_in_db = 'SQLUser0l' EXEC sp_grantdbaccess @loginame = 'BUILTINpower users'
  • 3. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич www.pglomonosov.org Красимир Дойчев Създаване на потребители и администриране на разрешения чрез Transact SQL 3 от 7 Обърнете внимание, че за SQLSERVER01 User01 и за SQL логин ID на User0l беше зададен @name_in_db. Параметърът @name__in_db ви позволява да зададете различно име като псевдоним на акаунта на системата за сигурност. Ако не е зададено @name_in_db, името на акаунта на системата за сигурност ще бъде псевдонимът на името на потребителя. 3.2. Премахване достъп на акаунт до базата данни Използвайте sp_revokedbaccess, за да премахнете акаунт на системата за сигурност от дадена база данни. Не можете да изтриете даден логин ID в SQL Server, докато не изпълните sp_revokedbacces за всички бази данни, за които са му предоставени привилегии. Обаче можете да изтривате акаунт на Windows, без да е необходимо първо да премахвате всички асоциации към бази данни. Написаният в следващия пример код показва как да използвате sp_revokedbaccess; за да премахнете User0l с псевдоним SQLUser0l от база данни Pub USE pubs EXEC sp_revokedbaccess @name_in_db = SQLUser0l 3.3. Показване списък на оторизираните потребители sp_helpuser 4. Администриране на роли Ролите облекчават администрирането на достъпа до базите данни, като позволяват на потребители да стават членове на роли и да наследяват техните разрешения и забрани върху обектите на БД. По този начин не е необходимо на всеки потребител да се задават индивидуално разрешенията, а е достатъчно само той да се присъедини към съответната роля. 4.1. Добавяне и изтриване на роли Използвайте системната съхранена процедура sp_addrole или някой инструмент, извикван от командния ред, например osql, за да добавите стандартна роля към база данни от Query Analyzer. Системната съхранена процедура sp_addrole съдържа входни параметри, чрез които се задава името на ролята (и, по желание, собственикът на ролята). Ако не определите собствеността върху ролята, по подразбираш за собственик се приема този, който създава ролята. В следващия пример се добавя роля, наречена Role0l, към база данни Pubs: USE pubs EXEC sp_addrole @rolename = 'role0l' Използвайте системната съхранена процедура sp_droprole, за да премахнете дадена дефинирана от потребителя стандартна роля. В следния пример се премахва роля, наречена Role0l: USE pubs EXEC sp_droprole @rolename = 'role01’ 4.2. Администриране на членството в роли Използвайте системната съхранена процедура sp_addrolemember, за да добавите членове към една дефинирана от потребителя стандартна роля или към фиксирана роля за база данни. Използвайте sp_addsrvrolemember, за да добавите акаунт на системата за
  • 4. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич www.pglomonosov.org Красимир Дойчев Създаване на потребители и администриране на разрешения чрез Transact SQL 4 от 7 сигурност към фиксирана роля за сървър. Системната съхранена процедура sp_addrolemember използва @rolename и @membername като входни параметри, a sp_addsrvrolemember използва @loginame и @rolename като входни параметри. В следващия пример се добавят Role02, BUILTINPower Users и User0l към Role0l (дефинирана от потребителя стандартна роля): USE pubs EXEC sp__addrolemember @rolename = 'role01', @membername = 'role02' < EXEC sp_addrolemember @rolename = 'role01', @membername = 'BUILTINpower users' EXEC sp_addrolemember @rolename = 'role01', @membername = 'user01’ За входния параметър @membername трябва да зададете асоциираното име. Например ако псевдонимът на група Power Users в базата данни е PowerU, тогава стойността на @membername e poweru. За да бъде направен член на роля, всеки потребител или група трябва да бъде асоцииран с базата данни. 5. Конфигуриране разрешенията на потребител Използвайте конструкции GRANT, REVOKE и DENY, за да администрирате разрешения за обекти и конструкции от Query Analyzer. 5.1. Конструкция GRANT Когато използвате GRANT, трябва да укажете кое е разрешението (или разрешенията) и на кого ще ги присвоявате. Използвайте ключовата дума ALL, за да присвоите всички валидни разрешения за обекти или конструкции. Когато присвоявате разрешения за обекти, трябва да укажете също така и върху какво се прилагат разрешенията за обекти. Подобно указание не е необходимо при разрешенията за конструкции, тъй като те се прилагат върху база данни, а не върху отделен обект в базата. По желание можете да укажете клауза WITH GRANT OPTION, за да позволите на съответния акаунт на системата за сигурност да предоставя на други същото разрешение, което му е било предоставено. Използвайте ключовата дума AS, за да укажете акаунт на системата за сигурност (група или роля) в текущата база данни, който е оторизиран да изпълнява конструкция GRANT. Ако разрешенията върху даден обект се предоставят на група или роля, трябва да използвате ключовата дума AS, за да укажете групата или ролята, оторизирани да присвояват разрешения на други. Системата за сигурност на SQL Server ще направи проверка дали сте член на посочената група или роля, преди да ви позволи да използвате конструкция GRANT. Основните клаузи в конструкция GRANT при присвояване на разрешения за конструкции са обобщени по следния начин: GRANT ALL | изрази за разрешения TO имена на акаунти Основните клаузи в конструкция GRANT при присвояване на разрешения за обекти са обобщени по следния начин: GRANT ALL | разрешения за обекти (колони) ON име_таблица име_изглед | ON име_таблица име_изглед (колони) ON съхранена_процедура потребителска_функция TO имена WITH GRANT OPTION AS име_група име_роля
  • 5. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич www.pglomonosov.org Красимир Дойчев Създаване на потребители и администриране на разрешения чрез Transact SQL 5 от 7 Ако искате да предоставите на един или повече акаунта на системата за сигурност всички валидни разрешения за обекти или конструкции, използвайте ключовата дума ALL, както е показано в следващия пример: USE pubs GRANT ALL TO public На ролята Public са присвоени всички възможни разрешения за конструкции върху база данни Pubs. Резултатът от това присвояване е, че на всички оторизирани потребители е позволено да задават всяко разрешение за конструкция спрямо базата данни. Не е много типично да се прави подобно присвояване, но примерът демонстрира как да се отвори базата данни за всички оторизирани потребители. Ако асоциирате специалния акаунт Guest с база данни Pubs, на всички автентицирани потребители, които не са асоциирани с база данни Pubs, също се предоставят пълни разрешения за конструкции, защото акаунтът Guest е член на ролята Public. В следващата конструкция е разрешено разглеждането и обновяването на таблица Titles от база данни pubs за потребителя user01. USE pubs GRANT UPDATE, SELECT ON dbo. Titles TO user01 Написаният в следния пример код показва как да присвоите разрешения за обекти UPDATE и SELECT само върху колони: USE pubs GRANT UPDATE, SELECT ON dbo.sales (ord_date, ord_num, qty) TO user01 Можете да смесвате разрешения за колони и разрешения за таблици, но така, че последното указано разрешение да се отнася за колона. Трябва да проверите дали последното разрешение за обект е допустимо разрешение за колона (SELECT или UPDATE), както е показано в следващия пример: USE pubs GRANT INSERT, DELETE, UPDATE, SELECT (ord_date, ord_num, qty) ON dbo.sales TO user01 Ha User01 са предоставени разрешения INSERT, DELETE и UPDATE за таблица dbo.sales и разрешение SELECT за колони Ord_Date, Ord_Num и Qty. Обърнете внимание, че името на таблицата е уточнено с името на собственика, dbo. Тази спецификация е опционална, но е добре да придобиете този навик при кодиране, защото в базата данни може да има и други таблици със същото име, но с различен собственик. Единственото валидно разрешение за обект, което може да се приложи за съхранена процедура, е EXECUTE. В следния пример EXECUTE се присвоява на Power Users за разширената съхранена процедура xp_cmdshell: USE master
  • 6. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич www.pglomonosov.org Красимир Дойчев Създаване на потребители и администриране на разрешения чрез Transact SQL 6 от 7 GRANT EXEC ON xp_cmdshell TO [BUILTINpower users] Разширената съхранена процедура xp_cmdshell се намира в база данни Master. Следователно Master трябва да стане текущата база данни. За обектите в текущата база данни можете само да предоставяте, отнемате или отказвате разрешения. Забележка Повече информация ще откриете в описанието на конструкция GRANT от SQL Server Books Online. 5.2. Конструкция REVOKE Използвайте конструкция REVOKE, за да премахвате от даден акаунт на системата за сигурност предоставени преди това разрешения. Форматът на конструкция REVOKE е подобен на формата на конструкция GRANT с някои изключения. Ключовата дума ТО в конструкция GRANT се замества с FROM, когато отнемате разрешени: за конструкции, и може да бъде или ТО, или FROM, когато отнемате разрешенията за обекти. Синтаксисът за отнемане на разрешенията за обекти включва опционалната ключова дума CASCADE и клауза GRANT OPTION FOR. Използвайте клауза GRANT OPTION FOR, за да отнемете WITH GRANT OPTION, присвоено на съответния акаунт на системата за сигурност. Използвайте ключовата дума CASCADE за отнемане на разрешенията, които са предоставени на зададения акаунт на системата за сигурност и на всеки друг акаунт, на който зададеният акаунт е предоставил разрешения. Трябва да зададете както GRANT OPTION FOR, така и CASCADE, за да отнемете състоянието на разрешение Grant, присвоено чрез акаунта системата за сигурност на други акаунти на тази система. В следващия пример се отнема разрешение EXEC от User01 и от всички други потребители, на които User01 е присвоил разрешение EXEC USE master REVOKE EXEC ON xp_cmdshell FROM user0l CASCADE Изпълнете следната системна съхранена процедура, за да разгледате текущите разрешения на разширената съхранена процедура: EXEC sp_helprotect 'xp_cmdshell' 5.3. Конструкция DENY Използвайте конструкция DENY, за да забраните явно на акаунт на системата за сигурност зададените привилегии и да попречите на този акаунта да наследява разрешението чрез група или членство в роли. Форматът на конструкция DENY е аналогичен на формата на конструкции GRANT и REVOKE. Както при конструкция GRANT, ключовата дума ТО определя за кого важи съответната конструкция. Конструкция DENY може да включва ключовата дума CASCADE за явно отказване на разрешения, които са били предоставени на зададения акаунт на системата за сигурност, и за отказване на разрешенията, предоставени от съответния акаунт на други акаунти. В следния пример се отказват разрешенията за конструкции на един логин ID на SQL Server и на една група:
  • 7. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич www.pglomonosov.org Красимир Дойчев Създаване на потребители и администриране на разрешения чрез Transact SQL 7 от 7 USE pubs DENY CREATE TABLE, CREATE VIEW, BACKUP DATABASE, BACKUP LOG TO user0l, [BUILTINpower users] 5.4. Показване на разрешенията sp_helpprotect @name=NULL, @username=’public’ Тази конструкция показва списък на разрешенията, присвоени на ролята Public. Тази роля съдържа всички оторизирани потребители, така че тя поставя началото на йерархията на сигурността на базата данни. ЛИТЕРАТУРА 1. Microsoft. MSCE Microsoft SQL Server 2000 Проектиране и реализация на бази данни Training kit. С., Софтпрес, 2001. 2. SQL Server Books Online