Надеюсь, вы поможете мне с этим.
У нас есть приложение, к которому мы должны ограничить доступ.Приложение будет использовать логин TestApp.
Я тестировал это с помощью SQL Server Management Studio v 17.9.1, и мы используем SQL Server 2016.
Этот логин будет иметь доступ ко всем таблицам, хранимым процедурам, представлениям, функциями запускает в своей собственной тестовой схеме в базе данных: Testing
и только для определенных таблиц из схемы dbo
, которые мы указываем в разрешениях пользователя TestAPP
.
Я использовал следующеесценарий для достижения этого.
Проблема, с которой мы сталкиваемся, заключается в том, что при входе в систему можно получить доступ ко всем системным представлениям и хранимым процедурам, и нам не нужен этот уровень доступа (прикрепленные изображения введите описание изображения здесь ) введите описание изображения здесь Этот логин не должен делать это в схеме TEST.
Создать, удалить, изменить таблицы из Test
схема
Создание, изменение, удаление представлений из Test
схемы
Создание, изменение, удаление хранимых процедур из 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.
Пожалуйста, смотрите ниже желаемый результат:
Большое спасибо за вашу помощь!