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

Откуда:
Сообщений: 930
Добрый день. Подскажите пожалуйста, можно ли в триггере входа узнать к какой БД идет попытка соединения? (Ведь в строке подключения она задана)
2 ноя 16, 11:45    [19849830]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
rsolanov,

а что такое триггер входа?
2 ноя 16, 11:48    [19849861]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
rsolanov,

https://msdn.microsoft.com/en-us/library/bb895328.aspx
2 ноя 16, 12:06    [19849990]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4248
TaPaK
rsolanov,

а что такое триггер входа?

Видимо подразумевается серверный DDL-триггер.
2 ноя 16, 12:26    [19850127]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
o-o
Guest
TaPaK
rsolanov,
а что такое триггер входа?

да боже мой, ну перевел товарищ на русский LOGON trigger :)
(вот я же говорю, перевод это зло)
---
как я понимаю, для узнавания базы надо уже иметь соединение,
а логон-триггер срабатывает еще до этого.
может, стОит использовать для этой цели AUDIT_LOGIN SQL Trace event, which can be used in Event Notifications?
BOL
The primary difference between triggers and event notifications is that triggers are raised synchronously with events,
whereas event notifications are asynchronous.
This means, for example, that if you want to stop a session from being established,
you must use a logon trigger.
An event notification on an AUDIT_LOGIN event cannot be used for this purpose.
2 ноя 16, 12:40    [19850226]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
o-o,
догадался :)
автор
может, стОит использовать для этой цели AUDIT_LOGIN SQL Trace event, which can be used in Event Notifications?

судя по всему результат тот же будет - максимум это дефолтную базу получить
2 ноя 16, 12:44    [19850266]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Ребят, здравствуйте.
-Существуют ли триггеры входа на уровне баз данных? Необходимо реализовать определенную логику при попытке подключения пользователя соединения к БД.

-AUDIT_LOGIN SQL Trace event: Как я могу в синхронном режиме проводить анализ логина, ролей и т.д. И при необходимости прервать соединение?

-В серверном триггере входа я пробовал получать APP_NAME(). Он полностью соответствует тому, который стоит в строке подключения. Выходит, что в контексте серверного триггера входа строка соединения в нашем распоряжении. Из нее можно взять и БД (ORIGINAL_DB_NAME) и Логин (ORIGINAL_LOGIN())

Microsoft SQL Server 2008 R2 (SP2) - 10.50.4339.0 (X64)
7 ноя 16, 14:22    [19865666]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
rsolanov
Ребят, здравствуйте.
-Существуют ли триггеры входа на уровне баз данных? Необходимо реализовать определенную логику при попытке подключения пользователя соединения к БД.

-AUDIT_LOGIN SQL Trace event: Как я могу в синхронном режиме проводить анализ логина, ролей и т.д. И при необходимости прервать соединение?

-В серверном триггере входа я пробовал получать APP_NAME(). Он полностью соответствует тому, который стоит в строке подключения. Выходит, что в контексте серверного триггера входа строка соединения в нашем распоряжении. Из нее можно взять и БД (ORIGINAL_DB_NAME) и Логин (ORIGINAL_LOGIN())

Microsoft SQL Server 2008 R2 (SP2) - 10.50.4339.0 (X64)

если вы ещё не попробовали - попробуйте, уже написали что нет базы во время этого события.
7 ноя 16, 14:26    [19865691]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
rsolanov,

что Вы изобретаете? Не знаете как настроить права доступа к базе, что ли?
7 ноя 16, 14:26    [19865694]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
o-o
Guest
чем меньше загадочности в описании "определенной логики",
тем больше шансов получить ответ.
что именно нужно реализовать?
подход у вас изначально неправильный:
юзер в базу или должен попадать, или не должен,
а не "то да, то нет, в зависимости от направления ветра"
7 ноя 16, 14:27    [19865696]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Задача стоит таким образом: есть приложение БД, для которого для каждого пользователя создается sql-логин. Есть пользователи, которые имея такой логин и зная пароль подключаются к БД не через приложение, а через SSMS. Такое поведение необходимо запретить.
Я знаю, что эту задачу можнорешить через роль приложения но руководство считает что придется много дорабатывать само приложение (которое уже сейчас не поддерживается) и проводить полное перетестирование.

CREATE TRIGGER trigger_logon
ON ALL SERVER
FOR LOGON
AS
BEGIN 
       declare @Login nvarchar(128) = ORIGINAL_LOGIN()
       declare @app_name nvarchar(128) = isnull(APP_NAME(), N'NS')
       --Предопределенные логины, блок проверки вне контекста базы данных
       if (@Login = N'sa') return
       --Все логины, кроме логинов с sql-аутентификацией (в том числе доменные)
       else if (not exists(select 1 from master.sys.server_principals where name = @Login and type = 'S')) return
       --Системные пользователи
       else if (exists(select 1
                                  from ProgBase.sys.database_principals u
                                               inner join (ProgBase.sys.database_role_members m join ProgBase.sys.database_principals r on m.role_principal_id = r.principal_id) on m.member_principal_id = u.principal_id
                                               inner join master.sys.server_principals l on u.sid = l.sid
                                  where u.type <> 'R' and l.name = @Login and r.name = N'SystemAccountsRole')) return
       --Учетка пользовательская и приложение из под которого осуществляется доступ к приложению
       else if (exists(select 1
                                  from ProgBase.sys.database_principals u
                                        inner join (ProgBase.sys.database_role_members m join ProgBase.sys.database_principals r on m.role_principal_id = r.principal_id) on m.member_principal_id = u.principal_id
                                        inner join ProgBase.sys.server_principals l on u.sid = l.sid
                                  where u.type <> 'R' and l.name = @Login and r.name = N'AccessOnlyProg') and @app_name = N'Prog') return
       else begin
             declare @error_message nvarchar(256)
             set @error_message = N'Access Denied: Logon Trigger, AppName=' + @app_name + N';Login=' + @Login
             RAISERROR(@error_message, 16, 1) WITH LOG
             ROLLBACK
       end
END;
GO
7 ноя 16, 14:41    [19865798]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
o-o
Guest
вот эту фразу на русский переведите:
"есть приложение БД, для которого для каждого пользователя создается sql-логин"
кто логин создает, приложение? на лету?
пускай создает, но зачем же пароль выдавать пользователю?
или же логины создали вы, раздали вместе с паролем,
а теперь что-то хотите запретить?
если второе, то себе и запретите выдавать пользователям логины с паролем.
пока они у них есть, на сервер будут попадать в обход вашего приложения
7 ноя 16, 14:47    [19865835]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
rsolanov
Member

Откуда:
Сообщений: 930
o-o
вот эту фразу на русский переведите:
"есть приложение БД, для которого для каждого пользователя создается sql-логин"
кто логин создает, приложение? на лету?
пускай создает, но зачем же пароль выдавать пользователю?
или же логины создали вы, раздали вместе с паролем,
а теперь что-то хотите запретить?
если второе, то себе и запретите выдавать пользователям логины с паролем.
пока они у них есть, на сервер будут попадать в обход вашего приложения

Так работает приложение. Необходимо ввести логин и пароль в окне авторизаии чтобы начать работать с приложением.
Посоветуйте как лучше реализовать механизм контроля доступа, основанного на триггере входа.
7 ноя 16, 14:55    [19865872]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
msLex
Member

Откуда:
Сообщений: 8151
rsolanov
Так работает приложение. Необходимо ввести логин и пароль в окне авторизаии чтобы начать работать с приложением.
Посоветуйте как лучше реализовать механизм контроля доступа, основанного на триггере входа.


Если пользователь знает логин пароль SQL сервера, вы не сможете запретить ему коннектиться, он всегда может полностью повторить строку подключения, используемую вашим приложением.
7 ноя 16, 15:08    [19865972]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
rsolanov
o-o
вот эту фразу на русский переведите:
"есть приложение БД, для которого для каждого пользователя создается sql-логин"
кто логин создает, приложение? на лету?
пускай создает, но зачем же пароль выдавать пользователю?
или же логины создали вы, раздали вместе с паролем,
а теперь что-то хотите запретить?
если второе, то себе и запретите выдавать пользователям логины с паролем.
пока они у них есть, на сервер будут попадать в обход вашего приложения

Так работает приложение. Необходимо ввести логин и пароль в окне авторизаии чтобы начать работать с приложением.
Посоветуйте как лучше реализовать механизм контроля доступа, основанного на триггере входа.

так а при чём здесь база тогда? проверяйте приложение
7 ноя 16, 15:10    [19865985]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
o-o
Guest
TaPaK
так а при чём здесь база тогда? проверяйте приложение

скорее, при чем тут приложение
они выдали пользователям login + password,
а теперь удивляются, что те на сервер попадают
верх абсурдопедии
7 ноя 16, 15:16    [19866025]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
o-o
TaPaK
так а при чём здесь база тогда? проверяйте приложение

скорее, при чем тут приложение
они выдали пользователям login + password,
а теперь удивляются, что те на сервер попадают
верх абсурдопедии

ну можно проверить с какого приложения логинится, правда зная логин пароль можно будет нарисовать любое приложение :)
7 ноя 16, 15:19    [19866043]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
komrad
Member

Откуда:
Сообщений: 5249
rsolanov
Задача стоит таким образом: есть приложение БД, для которого для каждого пользователя создается sql-логин. Есть пользователи, которые имея такой логин и зная пароль подключаются к БД не через приложение, а через SSMS. Такое поведение необходимо запретить.

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


http://www.codeproject.com/Articles/80903/Restricting-Access-to-Database-by-Application-Name
https://thesqldude.com/2012/04/07/how-to-prevent-users-from-accessing-sql-server-from-any-application-or-any-login-expect-your-main-application-its-login/
7 ноя 16, 16:00    [19866314]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
o-o
Guest
Да боже мой, прямо в Management Studio в options указать имя той самой программы, это ж ума не надо, и никакой триггер не поможет
7 ноя 16, 16:30    [19866512]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
o-o
Guest
а что за идея была "проверять базу при подключении"?
ну буду я все из мастера выполнять,
указывая всем таблицам кроме схемы еще и базу.
и это что, мне так запретили в базу ходить?
потому что подключение реально к мастеру было и более не менялось?
---
есть права -- все получил,
нет прав -- обломался,
казалось бы, что может быть проще?
7 ноя 16, 16:35    [19866537]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Предложите пожалуйста вариант решения задачи без переписывания приложения.
7 ноя 16, 17:40    [19866852]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
rsolanov
Предложите пожалуйста вариант решения задачи без переписывания приложения.

так суть задачи какая? пескать? не пускать? пускать не везде? При нормальном разграничении прав, всё равно откуда заходит пользователь
7 ноя 16, 17:42    [19866857]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
o-o
Guest
ну, чтобы совсем без переписывания приложения...
ок, у всех пользователей деинсталлировать студию,
офис, sqlcmd, osql, isql.
выкинуть всех пользователей из админов компа.
настроить убойные деменные политики и логон скрипты,
проверять при логоне, что новых админов не появилось,
запретить запуск любых ехе, кроме как из разрешенногo списка,
запретить загрузку с диска/флэшки, пароль на сетап.
короче, сделать все возможное, чтобы единственным клиентским приложением,
ходящим на сервер, была ваша программа,
и чтобы невозможно было хоть что-то запустить на компе,
кроме разрешенного политиками
7 ноя 16, 18:04    [19866963]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
o-o
Guest
TaPaK
rsolanov
Предложите пожалуйста вариант решения задачи без переписывания приложения.

так суть задачи какая? пескать? не пускать? пускать не везде? При нормальном разграничении прав, всё равно откуда заходит пользователь

ему надо пускать, но только через свое приложение.
----
можно еще сменить порт серверу.
никому его не разглашать, а в приложении сменить только параметры подключения:
дописать порт.
юзеры убьются порт подбирать,
они же в студии сервер как указывали, по имени?
ну пускай дальше продолжают, получат "сервер не найден"
7 ноя 16, 18:10    [19866996]     Ответить | Цитировать Сообщить модератору
 Re: Logon Trigger  [new]
komrad
Member

Откуда:
Сообщений: 5249
o-o
можно еще сменить порт серверу.
никому его не разглашать, а в приложении сменить только параметры подключения:
дописать порт.
юзеры убьются порт подбирать,
они же в студии сервер как указывали, по имени?
ну пускай дальше продолжают, получат "сервер не найден"

тогда уж и SQL Browser остановить надо, если у автора инстанс именованный
если дефолтный, то Browser и так ничего не скажет :)
7 ноя 16, 18:14    [19867009]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить