希望您能对此有所帮助。
我们有一个需要限制访问权限的应用程序。该应用程序将使用登录TestApp。
我一直在使用SQL Server Management Studio v 17.9.1进行测试,而我们正在使用SQL Server2016。
此登录名将有权访问其自己的架构中的所有表,存储过程,视图,函数和触发器,在数据库tatabase:Testing
中进行测试,并且只能访问我们指定的dbo
架构中的某些表TestAPP
用户的权限。
我已经使用以下脚本实现了这一目标。
我们遇到的问题是,登录名可以访问所有系统视图和存储过程,而我们不希望这种访问级别(附加图片enter image description here)enter image description here 此登录名不能在模式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登录名只能看到Test模式中的对象和某些dbo表。
请在下面查看所需结果:
非常感谢您的帮助!