拒绝用户访问SQL Server 2016中的所有sys和INFORMATION_SCHEMA视图以及sys存储过程

时间:2019-04-18 11:24:52

标签: sql sql-server user-permissions user-roles access-rights

希望您能对此有所帮助。

我们有一个需要限制访问权限的应用程序。该应用程序将使用登录TestApp。

我一直在使用SQL Server Management Studio v 17.9.1进行测试,而我们正在使用SQL Server2016。

此登录名将有权访问其自己的架构中的所有表,存储过程,视图,函数和触发器,在数据库tatabase:Testing中进行测试,并且只能访问我们指定的dbo架构中的某些表TestAPP用户的权限。

我已经使用以下脚本实现了这一目标。

我们遇到的问题是,登录名可以访问所有系统视图和存储过程,而我们不希望这种访问级别(附加图片enter image description hereenter image description here 此登录名不能在模式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登录名只能看到Test模式中的对象和某些dbo表。

请在下面查看所需结果:

enter image description here

非常感谢您的帮助!

0 个答案:

没有答案