Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
3BEPb Member Откуда: Сообщений: 19 |
Здравствуйте Есть MS-SQL 2008, в нем установлено несколько баз данных (база1, база2, база3), авторизация по SQL. Пользователи могут работать с базами как локально (с рабочего места) так и через VPN (дом, командировка ...). есть пользователи которые пользуются одним логином и паролем для доступа ко всем базам. Встала задача разграничить права этих пользователей. то есть если они работаю из локальной сети то должны иметь доступ только к базе "база1", если они заходят по VPN то только к "база2" и "база3". хотел использовать CREATE TRIGGER trigger_name ON ALL SERVER и EventData(). Как мне узнать к какой базе хочет подключится пользователь? |
6 мар 15, 21:55 [17355026] Ответить | Цитировать Сообщить модератору |
SQL2008 Member Откуда: Москва Сообщений: 4392 |
Создайте разные логины. |
6 мар 15, 22:18 [17355070] Ответить | Цитировать Сообщить модератору |
3BEPb Member Откуда: Сообщений: 19 |
создание нового пользователья не выход. должно Быт четко прописано кто имеет доступ из локально сети, кто по VPN а кто и обеими методами подключения. |
6 мар 15, 22:22 [17355082] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
|
||
6 мар 15, 22:29 [17355104] Ответить | Цитировать Сообщить модератору |
3BEPb Member Откуда: Сообщений: 19 |
Гавриленко Сергей Алексеевич, если есть возможность разрешать пользователю подключатся к серверу по определённому IP или логину при помощи (Logon Trigger). То может есть и способ узнать к какой базе он хочет подключится. |
6 мар 15, 22:34 [17355120] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
|
||
6 мар 15, 22:39 [17355138] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
2. Что будет делать в такм случае: use DB1; select * from DB2..Table1, DB3..Table2 ? 3. Административный бардак программным способом исправить нельзя. |
||
6 мар 15, 22:42 [17355153] Ответить | Цитировать Сообщить модератору |
3BEPb Member Откуда: Сообщений: 19 |
Да вы уверены?if exists(select 1 from sys.server_triggers where name = 'tr1') drop trigger tr1 on all server go create trigger tr1 on all server for logon as begin declare @x xml = EventData() declare @address nvarchar(25) = @x.value('(EVENT_INSTANCE/ClientHost)[1]', 'nvarchar(25)') if @address <> '192.168.0.1' rollback else commit end go вот если зайти с ИП 192.168.0.1 то конек к серверу не пройдет. |
6 мар 15, 22:47 [17355170] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
А если зайти по протоколу Shared Memory или Named Pipes?
Сообщение было отредактировано: 6 мар 15, 22:52 |
||||
6 мар 15, 22:51 [17355183] Ответить | Цитировать Сообщить модератору |
3BEPb Member Откуда: Сообщений: 19 |
Гавриленко Сергей Алексеевич, ну поставьте там =, я для примера привел. |
6 мар 15, 22:55 [17355198] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
|
||
6 мар 15, 22:59 [17355215] Ответить | Цитировать Сообщить модератору |
3BEPb Member Откуда: Сообщений: 19 |
invm, подключение к серверу я могу отследить а вот к какой базе он далее подключается не знаю как определить. для sql 2012 sys.dm_exec_sessions возвращает database_id а для 2008 нет. |
6 мар 15, 23:01 [17355227] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
|
||
6 мар 15, 23:05 [17355247] Ответить | Цитировать Сообщить модератору |
churupaha Member Откуда: Краснодар Сообщений: 1015 |
3BEPb,
|
|
6 мар 15, 23:49 [17355394] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31781 |
Клиент может подключиться к одной базе, а работать с другой. Или может сменить текущую базу в любой момент. Так что sys.dm_exec_sessions.database_id - это не для защиты. |
||
7 мар 15, 00:39 [17355532] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
Разнесите базы по разным серверам и настройте фаервол. |
7 мар 15, 02:01 [17355607] Ответить | Цитировать Сообщить модератору |
paskudnik Member Откуда: Чесслово, нашел, гражданин начальник! Сообщений: 2 |
Вот плюс, любая задача лучше всего решается специализированными средствами. Но в инфраструктуре автора это может быть проблемно реализовать. |
||
7 мар 15, 13:40 [17356142] Ответить | Цитировать Сообщить модератору |
paskudnik Member Откуда: Чесслово, нашел, гражданин начальник! Сообщений: 2 |
3BEPb, Вы не могли бы рассказать подробнее, что вообще работает и зачем Вам это надо? Возможно, имея более подробное представление о задачах и инфраструктуре, можно будет предложить более удобное решение, чем деление серверов или триггерный костылинг. |
7 мар 15, 13:42 [17356147] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8317 |
Можно попробовать настроить доменную авторизацию для VPN. в этом случае VPN можно отнести к другому домену, создать альтернативный набор пользователей и дать им требуемые права к базам. Пользователь же будет авторизоваться доверительным соединением, т.е. с той учеткой, с которой работает в Windows. Имя и пароль в разных доменах можно создать одинаковые. |
7 мар 15, 17:07 [17356513] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |