Как ограничить доступ к данным в SQL Server?

Не нашла ответа на форуме:

Клиенту важно, чтобы пользователи не имели возможность выгрузить клиентов из базы.
В клиенте ТС такие возможности позакрывали, а как быть с SQL Serverом? Пользователь может зайти под своим логином/паролем например в Management Studio и вытянуть из таблиц в файл данные. Как запретить?

Нравится

11 комментариев

Здравствуйте, Анна.

Если запретить пользователям на уровне БД выполнять SELECT'ы к БД, то и Terrasoft не будет работать. Поэтому тут нужно администрировать на уровне Windows - т.е. запретить устанавливать новый софт (MS SQL Management Studio), если он уже имеется - запретить его запуск всем, кроме администратора (к примеру).

Тут вариант - прятать в бинарник логины/пароли и запускать ТС с них. Или как еще?

Можно сделать триггер на вход в систему, и проверять на то, какая программа пытается законнектиться, например, если это не sa и программа не TSClient.exe - то не давать войти в систему.

Вот пример из справки MS SQL

Можно использовать триггеры входа для проверки и управления сеансами сервера, например для отслеживания входов в систему, ограничения входов в SQL Server или ограничения числа сеансов для конкретного имени входа. Например, в следующем коде триггер входа запрещает попытки входа на SQL Server, инициированные под именем входа login_test, если уже созданы три пользовательских сеанса под этим именем входа.

USE master;
GO
CREATE LOGIN login_test WITH PASSWORD = '3KHJ6dhx(0xVYsdf' MUST_CHANGE,
    CHECK_EXPIRATION = ON;
GO
GRANT VIEW SERVER STATE TO login_test;
GO
CREATE TRIGGER connection_limit_trigger
ON ALL SERVER WITH EXECUTE AS 'login_test'
FOR LOGON
AS
BEGIN
IF ORIGINAL_LOGIN()= 'login_test' AND
    (SELECT COUNT(*) FROM sys.dm_exec_sessions
            WHERE is_user_process = 1 AND
                original_login_name = 'login_test') > 3
    ROLLBACK;
END;

Евгений, спасибо за публикацию варианта решения вопроса.
Анна, если возникнут дополнительные вопросы - обращайтесь.

нужна трехзвенка, все остальное обходится
или использовать терминальный сервер

А как обходится вариант с использованием триггера на logon?

А что делает триггер, смотрит название файла программы? Кстати, как? Так файл и переименовать можно.
Или обменивается с клиентом какими-то незадокументированными позывными?

"Миxалыч" написал:

нужна трехзвенка


?

"Анна Проненко" написал:
Миxалыч пишет:

нужна трехзвенка

?


Здравствуйте, Анна. Скорее всего имеется ввиду "Трёхуровневая архитектура":
Ссылка

Здравствуйте.

Следующий набор таблиц поможет решить проблему с точной идентификацией на триггере (for logon):

sys.dm_exec_sessions
sys.dm_exec_connections
sys.sysprocesses

Показать все комментарии