ПРЕДОСТАВЕТЕ съвети и трикове за SQL Server

Внедряването на оператора GRANT на SQL Server се различава малко от стандарта ANSI. Стандартните клаузи FROM, HIERARCHY и ADMIN не се поддържат. Обаче предоставя възможност за предоставяне на специфични системни привилегии и за предоставянето им от контекста на друг потребител. Синтаксисът е по-долу.

обектни привилегии

Предоставя привилегии за извършване на различни операции, които могат да се използват във всяка комбинация (с изключение на ВСИЧКИ [ПРИВЕЛЕГИ]).

ВСИЧКИ [ПРИВЕЛЕГИ]

Всички привилегии, присвоени в момента на посочените потребители и/или на посочените обекти на база данни, се предоставят. Използването на това предложение се обезкуражава, тъй като допринася за неизвестността на програмирането. Клаузата ALL може да се използва само от потребители със системни роли SYSADMIN и DBOWNER или от собственика на обекта.

На посочения потребител се присвоява определената привилегия за достъп до посочения обект (например таблица или изглед). Използвайте списъка на колоните в скоби, за да посочите привилегии на ниво колона. Привилегии ще се присвояват само на именувани колони.

ПРЕПРАТКИ

Предоставено е привилегията за създаване и отпадане на ограничения за външен ключ, отнасящи се до обекта на базата данни като родителски обект.

ИЗПЪЛНИ

Дайте право да изпълнява съхранена процедура, дефинирана от потребителя функция или разширена съхранена процедура.

системни_привилегии

Предоставят се следните привилегии, всяка от които дава право на изпълнение на съответната инструкция.

Привилегията за изпълнение на израза CREATE също предполага привилегията да изпълнява съответните изрази ALTER и DROP.

Посочва се обектът, право на достъп до който е присвоено. Тази оферта не се изисква при присвояване на системни привилегии. Ако обектът е таблица или изглед, можете по желание да посочите привилегиите за конкретни колони. На таблица или изглед можете да предоставите привилегии SELECT INSERT UPDATE. ИЗТРИВАНЕ И РЕФЕРЕНЦИИ. Можете да присвоявате привилегии SELECT и UPDATE само на колони и изгледи на таблици или UDF. Можете да предоставите привилегия EXECUTE на съхранена процедура и разширена съхранена процедура. Можете също така да предоставите ПРИЛОЖЕНИЯ ЗА РЕФЕРЕНЦИИ за дефинирани от потребителя функции. Необходими са привилегии REFERENCES за функции и изгледи, създадени с клаузата WITH SCHEMABUILDING.

Името на потребителя или ролята, на която е присвоена привилегията. Можете да посочите множество получатели на привилегията, като посочите имената им, разделени със запетаи. За да предоставите привилегии на ролята PUBLIC, използвайте ключовата дума PUBLIC, като се предполага, че тази роля включва всички потребители. SQL Server също поддържа роля, наречена ГОСТ, която се използва от всички потребители, които нямат никакъв друг акаунт в базата данни. Тъй като SQL Server позволява два различни модела на защита (единият се основава на базата данни, а другият на операционната система Windows), можете да предоставите привилегии на потребител на SQL Server, потребител на Windows, група на Windows или роля на база данни на SQL Server. Името на получателя може да бъде някоя от горните опции.

С ГРАНТОВА ОПЦИЯ

Позволява на получателя да присвоява посочената привилегия на други потребители и роли. THE WITH GRANT OPTION може да се използва само с привилегии на обект.

Задава алтернативен потребител или група, която има разрешение за изпълнение на оператора GRANT в базата данни. Можете да използвате клаузата AS за предоставяне на привилегии, сякаш сесията, в която се присвоява привилегията, е част от контекста на група или роля, различна от текущата.

Привилегии могат да се присвояват само в текущата база данни и не могат да се присвояват в няколко бази данни наведнъж.

Моделът на защита на SQL Server е малко по-различен от другите платформи, описани тук (и малко по-различен от стандарта ANSI). Както при стандарта ANSI, SQL Server използва GRANT за присвояване на специфични привилегии на потребител или роля и REVOKE за премахване на тези привилегии. В SQL Server тези команди се допълват от командата DENY, чийто синтаксис е почти идентичен със синтаксиса на командата REVOKE.

Изразът DENY в SQL Server позволява на администратора на базата данни напълно да откаже определени права на потребител или група. За да се предоставят привилегии отново, тази забрана трябва първо да бъде премахната. Инструкцията DENY има предимство пред инструкциите GRANT и REVOKE. Операторът DENY може да се използва за пълно премахване на всички привилегии от потребител, който иначе би могъл да получи привилегии въз основа на членството им в групата на Windows или назначени роли в база данни на SQL Server.

SQL Server има система за приоритет на привилегиите. Така че, ако даден потребител има привилегия, присвоена му като потребител, но тази привилегия се отменя на ниво група (на която този потребител е член), тогава той губи тази привилегия и на двете нива.

SQL Server също така предоставя няколко фиксирани системни роли с предварително дефинирани разрешения както за обекти, така и за команди. Ролите на SQL Server са както следва:

SYSADMIN

Може да извършва каквито и да е действия на сървъра и има достъп до всички обекти.

СЪРВЪР АДМИНИСТРАТОР

Може да регулира конфигурационните параметри на сървъра и да стартира и спира сървъра.

НАСТРОЙКА АДМИНИСТРАТОР

Може да изпълнява процедури и свързани сървъри.

АДМИНИСТЪР ЗА СИГУРНОСТ

ПРОЦЕСАДМИНИСТРАЦИЯ

Може да администрира процеси, работещи на SQL Server.

DBCREATOR

Може да създава, променя и пуска бази данни.

ДИСКАДМИН

Може да администрира дискове и файлове.

БУЛКАДМИН

Може да извършва операции за групово копиране (BCP операции) и да издава команди BULK INSERT (и обикновени команди INSERT) в таблици на базата данни.

Потребител със системната роля на SYSADMIN може да предостави всякакви права на всяка база данни на сървъра. Потребителите със системната роля DBjOWNER и DB SECURITYADMIN могат да предоставят достъп до всеки оператор или обект в базата данни, която притежават. Системните привилегии могат да бъдат предоставени от потребители със системната роля DBJDDLADMIN или SYSADMIN, както и от собственика на базата данни.

Потребителите, присвоени на системни роли, могат да ги присвояват на други потребители и акаунти, но не с помощта на израза GRANT. За да присвоите системна роля на потребител, трябва да използвате съхранена процедура на SQL Server, наречена sp_addsrvrolemember.

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

DBOWNER

Може да изпълнява функциите на всички други системни роли в базата данни, плюс някои други задачи за конфигуриране и поддържане на базата данни.

DB_ACCESSADMIN

Може да добавя и премахва към потребителска база данни на Windows и SQL Server.

DB_DATAREADER

DBJATAWRITER

DBJDDLADMIN

Може да добавя, променя и изтрива обекти в базата данни и да изпълнява всякакви DDL изрази.

DBJECURITYADMIN

Може да администрира роли и потребители на SQL Server, както и права за достъп до обекти и изрази в базата данни.

DBJ3A CKUPOPERA TOR

DB_DENYDATAREADEfi

Достъпът за четене на база данни е отказан.

DBDENYDATA ПИСАТЕЛ

Достъпът до базата данни за промяна на данни е забранен.

Подобно на системните роли на ниво сървър, системните роли на ниво база данни не могат да бъдат зададени с помощта на израза GRANT. Това изисква използването на съхранена процедура в системата на SQL Server, наречена sp_addrolemember.

Следващият пример предоставя на потребителите emily и sarah системните привилегии CREATE DATABASE и CREATE TABLE. След това на групата редактори се присвояват няколко привилегии в таблицата със заглавия. След това членовете на групата редактори могат да присвояват разрешения на други потребители.

Следващият пример предоставя права за достъп на потребител на база данни на име sam и потребител на Windows на име Jacob.

ПРЕДОСТАВЕТЕ СЪЗДАВАНЕ НА МАСА ЗА sam, [corporatejacob] GO

Следващият пример показва как да предоставите допустими отклонения с помощта на незадължителната ключова дума AS. В този пример потребителят emily е собственик на таблицата за продажби и предоставя привилегии SELECT на ролята sales_manager. Потребител kelly, на когото е назначена ролята salesjnanager, иска да предостави права на SELECT на потребител sam, но не може да го направи, тъй като правата са предоставени на ролята sales_manager, а не на този потребител лично. За да заобиколи този проблем, потребителят kelly може да използва предложението за AS.

Първоначално предоставяне на привилегии.

Кели прехвърля привилегията на потребител Сам като потребител, на когото е възложена ролята sale_manager GRANT SELECT ON sales_detail TO sam AS sales_manager GO

Допълнителна информация по темата

Съвети и техники за използване на INSERT в бази данни на SQL Server

Методи и техники за използване на DELETE в бази данни на SQL Server

Правила и практики за използване на изявлението GRANT в бази данни на MySQL

Някои съвети за използване на UPDATE в бази данни на SQL Server