Запретить пользователю доступ ко всем системным sys и INFORMATION_SCHEMA представлениям и хранимым процедурам sys в SQL Server 2016 - PullRequest
1 голос
/ 18 апреля 2019

Надеюсь, вы поможете мне с этим.

У нас есть приложение, к которому мы должны ограничить доступ.Приложение будет использовать логин TestApp.

Я тестировал это с помощью SQL Server Management Studio v 17.9.1, и мы используем SQL Server 2016.

Этот логин будет иметь доступ ко всем таблицам, хранимым процедурам, представлениям, функциями запускает в своей собственной тестовой схеме в базе данных: Testing и только для определенных таблиц из схемы dbo, которые мы указываем в разрешениях пользователя TestAPP.

Я использовал следующеесценарий для достижения этого.

Проблема, с которой мы сталкиваемся, заключается в том, что при входе в систему можно получить доступ ко всем системным представлениям и хранимым процедурам, и нам не нужен этот уровень доступа (прикрепленные изображения введите описание изображения здесь ) введите описание изображения здесь Этот логин не должен делать это в схеме TEST.

  1. Создать, удалить, изменить таблицы из Test схема

  2. Создание, изменение, удаление представлений из Test схемы

  3. Создание, изменение, удаление хранимых процедур из Test схемы

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

Я создал роль [db_TestExecutor] и прикрепил рольпользователю.а затем дал определенные разрешения для таблиц dbo, но они по-прежнему могут видеть все объекты sys.

Используемый ниже код SQL:

USE [Testing]
GO
CREATE SCHEMA [Test] AUTHORIZATION [dbo]

GO

CREATE ROLE [db_TestExecutor]
GO

GRANT EXECUTE ON SCHEMA::Test TO [db_TestExecutor]
GO

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::Test TO [db_TestExecutor]


USE [mASTER]
GO

IF NOT EXISTS (SELECT 1 FROM sys.server_principals WHERE [name] = 'TestApp')

                    BEGIN
                        CREATE LOGIN TestApp WITH PASSWORD=N'Password123', DEFAULT_DATABASE=[tempdb], DEFAULT_LANGUAGE=[British], CHECK_EXPIRATION=OFF, CHECK_POLICY=ON
                    END

USE [Testing]
GO
CREATE USER [TestApp] FOR LOGIN [TestApp] 
GO
ALTER ROLE [db_TestExecutor] ADD MEMBER  [TestApp]
GO
GRANT INSERT ON [dbo].[tblOrders] TO [TestApp]
GO              
GRANT SELECT ON [dbo].[tblOrders] TO [TestApp]
GO              
GRANT UPDATE ON [dbo].[tblOrders] TO [TestApp]
GO
GRANT SELECT ON [dbo].[test] TO [TestApp]

Я ожидаю, что логин TestApp сможет видеть только объектыиз схемы тестирования и только определенных таблиц dbo.

Пожалуйста, смотрите ниже желаемый результат:

enter image description here

Большое спасибо за вашу помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...