Как да разрешите на потребител на SQL Server да вмъква/актуализира/изтрива данни, но не и да променя схемата?

Моето приложение (C#, ASP.Net) трябва да вмъква, актуализира и изтрива данни в DB и да изпълнява съхранени процедури. Трябва да му попреча да променя схемата на DB - без промяна на таблици, създаване или изтриване, без промени в съхранените процедури.

Каква комбинация от разрешения трябва да дам на потребителя на приложението? Просто „изберете“ няма да работи, защото трябва да вмъкне/актуализира/изтрие данни в таблици.

Как да проверя разрешенията и достъпа за конкретно влизане? Как да дам или откажа разрешения и достъп за влизане? Трябва да дам разрешения на нов потребител (влизане) за достъп само до една база данни.

Използване на SQL Server 2008 R2, със SSMS.


person jprusakova    schedule 18.06.2012    source източник


Отговори (1)


Ако наистина искате да контролирате това на ниво обект, можете да направите:

GRANT SELECT,UPDATE,INSERT,DELETE ON dbo.table TO user;

На ниво схема:

GRANT SELECT,UPDATE,INSERT,DELETE ON SCHEMA::dbo TO user;

В идеалния случай обаче не бихте позволили ad hoc DML срещу вашите таблици и да контролирате всички DML чрез съхранени процедури. В този случай просто трябва да предоставите exec на самата процедура, а не на обектите, които докосва:

GRANT EXEC ON dbo.procedure TO user;

По същия начин, ако искате да разрешите exec на всички процедури в конкретна схема, можете да кажете:

GRANT EXEC ON SCHEMA::dbo TO user;

Единственото изключение е, когато вашата съхранена процедура съставя динамичен SQL. В тези случаи все пак може да се наложи да приложите разрешения към базовите таблици в контекста на динамичното изпълнение на SQL или може да можете да използвате EXECUTE AS OWNER.

person Aaron Bertrand    schedule 18.06.2012
comment
Предоставянето на разрешение за „актуализация“ и „изтриване“ ще позволи ли на този потребител да променя и премахва таблици? Също така, мога ли да дам разрешения за схема, а не за таблица? - person jprusakova; 18.06.2012
comment
Не, актуализирането и изтриването се отнасят за данните в таблицата, а не за самите данни. Винаги можете да опитате това. И да, публикувах пример, където можете да повлияете на схемата вместо на обект (което може да бъде полезно, ако добавите таблици по-късно, разрешенията се наследяват, освен ако не искате да добавите таблица, която потребителят не имате достъп до, тогава ще трябва да откажете изрично на тази таблица). - person Aaron Bertrand; 18.06.2012
comment
как мога да проверя и променя разрешенията за влизане в SSMS или чрез скрипт? коя сървърна роля да избера за този нов потребител с ограничен достъп? - person jprusakova; 18.06.2012
comment
Можете да погледнете sys.database_permissions. Нямам представа коя сървърна роля трябва да използвате, но ако предоставяте изрични права, публичните трябва да са много (db_datareader / db_datawriter може да се изисква в зависимост от куп други фактори). Сигурността е сложна тема и мисля, че е нещо, при което може да се нуждаете от урок или обучение, а не от отговори на коментари. - person Aaron Bertrand; 18.06.2012
comment
Не знам за оф-хенд, съжалявам. Бих търсил с помощта на google или bing, което можете да направите и вие. :-) - person Aaron Bertrand; 18.06.2012
comment
търся :) и чета, и се опитвам да разбера. Отговорите и коментарите на Stackoverflow помагат много, в допълнение към други неща, намерени онлайн. - person jprusakova; 18.06.2012