Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как запретить удалять БД  [new]
Ниггадяй
Member

Откуда: Россия, Краснодар
Сообщений: 252
Добрый день!
Подскажите, пожалуйста, какие разрешения для логина/пользователя нужно задать, чтобы была возможность:
* создавать/удалять суности (таблицы, процедуры и т.д.)
* добавлять/изменять/удалять данные из таблиц

НО, нельзя было удалить саму БД!
10 авг 15, 09:23    [17997139]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
Ниггадяй
Member

Откуда: Россия, Краснодар
Сообщений: 252
SQL 2008 R2
SQL Auth mode
10 авг 15, 09:28    [17997160]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
mittagswind
Member

Откуда:
Сообщений: 117
Ниггадяй,

сомнительное желание, хотите от кривых рук защититься?
а если человек просто подропает все что в базе есть (скриптом), то какой от пустой базы толк?
10 авг 15, 09:39    [17997216]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Можно смотреть в сторону создания DDL триггера... это как вариант.
10 авг 15, 09:53    [17997286]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
Ниггадяй
Member

Откуда: Россия, Краснодар
Сообщений: 252
mittagswind, ну вот такое желание у заказчика. Чтоб с данными все операторы делали что угодно, а БД не могли грохнуть, точнее могли определенные пользователи.
10 авг 15, 10:02    [17997325]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Сделать триггер на событие удаления бд... и в нем проверяйте юзера... если юзер не тот кидайте raiserror и юзер ничего не удалит.
10 авг 15, 10:18    [17997389]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Пользователь не должен быть dbo, как минимум. Разрешения выдают командой GRANT или интерактивно через свойства базы.
10 авг 15, 11:38    [17997759]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
Ниггадяй
Member

Откуда: Россия, Краснодар
Сообщений: 252
AlanDenton
Сделать триггер на событие удаления бд... и в нем проверяйте юзера... если юзер не тот кидайте raiserror и юзер ничего не удалит.

а как на уровне базы создать триггер для DROP_DATABASE?
я могу вот так:

CREATE TRIGGER ddl_trig_drop_db
ON ALL SERVER
FOR DROP_DATABASE 
AS BEGIN
        -- check db & user
	ROLLBACK
END


db_name() - master

Как мне узнать реальное имя бд, которое хотят удалить?
10 авг 15, 12:11    [17997989]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
CREATE TRIGGER ddl_trig_drop_db
	ON ALL SERVER FOR DROP_DATABASE 
AS BEGIN

	SET NOCOUNT ON;

	DECLARE @e XML = EVENTDATA()

	SELECT
		  @e.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'SYSNAME')
		, @e.value('(/EVENT_INSTANCE/LoginName)[1]', 'SYSNAME')

	...

END


все есть в справке.. почитайте про EVENTDATA()
10 авг 15, 12:27    [17998107]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Какие триггеры, куда вас понесло?
10 авг 15, 12:40    [17998180]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Понятно, что это можно и правами задать... триггеры для варианта привел.
10 авг 15, 12:58    [17998311]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
Ниггадяй
Member

Откуда: Россия, Краснодар
Сообщений: 252
deny control to ...
grant connect to ...

база становится не доступна для пользователя
10 авг 15, 14:38    [17999066]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
VladimirSQL
Member

Откуда: Киев
Сообщений: 37
А почему бы не попробовать дать разобраться с ролями уровня базы данных?
Разрешить роли db_datawriter, db_datareader и не более.

Конечно же перепроверить права доступа (особенно на удаление БД) на тестовой БД
10 авг 15, 17:25    [18000274]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
o-o
Guest
VladimirSQL
А почему бы не попробовать дать разобраться с ролями уровня базы данных?
Разрешить роли db_datawriter, db_datareader и не более.

а кто из них создает сущности, db_datawriter или db_datareader?
Ниггадяй
* создавать/удалять суности (таблицы, процедуры и т.д.)
10 авг 15, 17:38    [18000354]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
VladimirSQL
Member

Откуда: Киев
Сообщений: 37
o-o,

"Members of the db_datawriter fixed database role can add, delete, or change data in all user tables."

Возможно, что автору будет достаточно этого.
Сам вопрос достаточно экспериментальный, поэтому я и предлагаю поэкспериментировать с основными ролями, а не тригеррами.

Операторов добавить в эти группы, а избранным предоставить db_owner.
Так же припускаю, что возжно если автор покажет заказчику [url= https://msdn.microsoft.com/library/ms189121(v=sql.120).aspx] стандартную ролевую модель для MS SQL[/url], может измениться условие задачи.

P.S. А возможно, что я совсем не прав и нужно пилить триггер и удовлетворять извращенные желания в том виде в котором они есть ;)
10 авг 15, 17:49    [18000417]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
VladimirSQL
Member

Откуда: Киев
Сообщений: 37
VladimirSQL
o-o,

"Members of the db_datawriter fixed database role can add, delete, or change data in all user tables."

Возможно, что автору будет достаточно этого.
Сам вопрос достаточно экспериментальный, поэтому я и предлагаю поэкспериментировать с основными ролями, а не тригеррами.

Операторов добавить в эти группы, а избранным предоставить db_owner.
Так же припускаю, что возжно если автор покажет заказчику
[url= https://msdn.microsoft.com/library/ms189121(v=sql.120).aspx] стандартную ролевую модель для MS SQL[/url]
, может измениться условие задачи.

P.S. А возможно, что я совсем не прав и нужно пилить триггер и удовлетворять извращенные желания в том виде в котором они есть ;)


Корректная ссылка: https://msdn.microsoft.com/library/ms189121(v=sql.120).aspx
10 авг 15, 17:51    [18000431]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
o-o
Guest
VladimirSQL,
капец какой-то.
для тех, кто не в курсе, кто такие сущности, ТС перечислил их в скобочках.
но я могу и для каждой сущности переспросить:
db_datawriter у нас что создает, таблицы, процедуры, функции?
по ссылке что-то про сущности не пишут. только про данные.
так что вопрос снова к вам.

экспериментальный вопрос, говорите?
ну, попробyйте что-либо создать (CREATE),
являясь лишь db_datawriter-ом
10 авг 15, 18:20    [18000617]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
VladimirSQL
Member

Откуда: Киев
Сообщений: 37
o-o,

Согласен, ответ неправильный, так как этих ролей будет недостаточно.
Итак, члены группы db_datawriter и db_datareader смогут считывать, добавлять, удалять или изменять все данные из всех пользовательских таблиц БД.

А вот для добавления\управления сущностями стоит немного заморочиться, например:
USE db_mydatabase
GRANT ALTER ON Schema :: DBO TO user_mydatabase
GRANT CREATE TABLE TO user_mydatabase
GO
позволит пользователю user_mydatabase создавать таблицы в БД db_mydatabase

По сути, для Ниггадяй, необходимо разрешить все привилегии (GRANT ALL Object Permissions) для пользователей.
И не предоставлять этим пользователям дополнительных прав на сервере или базе (serveradmin, sysadmin, db_owner) для избежания удаления БД.

+GRANT ALL Object Permissions

Предоставление ALL не включает все возможные разрешения, оно эквивалентно предоставлению всех разрешений ANSI-92, применимых к указанному объекту. Значение ALL различается для разных типов объектов
Разрешения на скалярные функции: EXECUTE, REFERENCES.
Разрешения на функции с табличным значением: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
Разрешения на хранимые процедуры: EXECUTE.
Разрешения на таблицы: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
Разрешения на представления: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
Подробней: GRANT (Transact-SQL), GRANT Object Permissions (Transact-SQL)
11 авг 15, 16:33    [18004196]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
o-o
Guest
VladimirSQL
o-o,
По сути, для Ниггадяй, необходимо разрешить все привилегии (GRANT ALL Object Permissions) для пользователей.

а вы прочли по ссылке, вами же приведенной, что это за ALL?

ALL
This option is deprecated and maintained only for backward compatibility.
It does not grant all possible permissions. Granting ALL is equivalent to granting the following permissions.

и как будет выглядеть финальный код, вы тоже не уточнили.
это для каждого объекта в базе предлагаете выполнить?
т.е. для имеющихся объектов.
но ТС просил для СОЗДАНИЯ, т.е. объектов еще нет,
на что собираетесь выдавать GRANT ALL?
11 авг 15, 18:14    [18004841]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
VladimirSQL
Member

Откуда: Киев
Сообщений: 37
o-o
VladimirSQL
o-o,
По сути, для Ниггадяй, необходимо разрешить все привилегии (GRANT ALL Object Permissions) для пользователей.

а вы прочли по ссылке, вами же приведенной, что это за ALL?

ALL
This option is deprecated and maintained only for backward compatibility.
It does not grant all possible permissions. Granting ALL is equivalent to granting the following permissions.

и как будет выглядеть финальный код, вы тоже не уточнили.
это для каждого объекта в базе предлагаете выполнить?
т.е. для имеющихся объектов.
но ТС просил для СОЗДАНИЯ, т.е. объектов еще нет,
на что собираетесь выдавать GRANT ALL?


If the securable is a database, ALL means BACKUP DATABASE, BACKUP LOG, CREATE DATABASE, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TABLE, and CREATE VIEW.

Вы так сильно желаете со мной поспорить, что я уже не уверен мы обсуждаем подход к решению вопроса автора или то что вы правы, а я нет.
Подождем ТС, предполагаю, что он не просто так задавал вопрос.
12 авг 15, 12:54    [18007517]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20585
Хм... сможет ли пользователь удалить БД, если в ней есть объект, на удаление которого у пользователя прав нет?
12 авг 15, 13:13    [18007666]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
o-o
Guest
VladimirSQL
Вы так сильно желаете со мной поспорить, что я уже не уверен мы обсуждаем подход к решению вопроса автора или то что вы правы, а я нет.

да нужны вы мне больно
я вопрос ТС обсуждаю в свете ваших предложений, а не вас.
ТС просил создание сущностей,
и создание каких-то вы выдали (вместе с возможностью бэкапить зачем-то)
перечислить недоатающие CREATE-ы?
CREATE AGGREGATE
CREATE ASSEMBLY
CREATE ASYMMETRIC KEY
CREATE CERTIFICATE
CREATE CONTRACT
CREATE DATABASE
CREATE DATABASE DDL EVENT NOTIFICATION
CREATE FULLTEXT CATALOG
CREATE MESSAGE TYPE
CREATE QUEUE
CREATE REMOTE SERVICE BINDING
CREATE ROLE
CREATE ROUTE
CREATE SCHEMA
CREATE SERVICE
CREATE SYMMETRIC KEY
CREATE SYNONYM
CREATE TYPE
CREATE XML SCHEMA COLLECTION

не хватает больше, чем выдано, + выдано то, что не просили.
12 авг 15, 13:18    [18007714]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
o-o
Guest
Akina
Хм... сможет ли пользователь удалить БД, если в ней есть объект, на удаление которого у пользователя прав нет?

DROP DATABASE
Permissions
Requires the CONTROL permission on the database,
or ALTER ANY DATABASE permission,
or membership in the db_owner fixed database role.

если у вас есть хотя бы одно из перечисленного,
в базе у вас уже есть резрешения на все объекты
12 авг 15, 13:25    [18007745]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
invm
Member

Откуда: Москва
Сообщений: 9400
Ниггадяй
* создавать/удалять суности (таблицы, процедуры и т.д.)
Членство в фиксированной роли db_ddladmin.
Ниггадяй
* добавлять/изменять/удалять данные из таблиц
Членство в фиксированных ролях db_datareader и db_datawriter.
12 авг 15, 13:31    [18007775]     Ответить | Цитировать Сообщить модератору
 Re: Как запретить удалять БД  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20585
o-o
если у вас есть хотя бы одно из перечисленного,
в базе у вас уже есть резрешения на все объекты

Я верно понимаю, что при наличии CONTROL permission on the database, or ALTER ANY DATABASE permission, or membership in the db_owner fixed database role и, соответственно, после выполнения GRANT DROP DATABASE попытка, например, DENY DROP table таблицы в этой базе будет проигнорирована?
12 авг 15, 14:24    [18008167]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить