Sql server SQL Server 2008授予信息\u schema.columns的权限
我有一系列从数据库中选择数据的存储过程。我有一个角色(cctc_reader),该角色具有对过程授予的执行权限。其中一个过程调用另一个名为Sql server SQL Server 2008授予信息\u schema.columns的权限,sql-server,sql-server-2008,permissions,information-schema,Sql Server,Sql Server 2008,Permissions,Information Schema,我有一系列从数据库中选择数据的存储过程。我有一个角色(cctc_reader),该角色具有对过程授予的执行权限。其中一个过程调用另一个名为recControl\u system\u option的存储过程,该存储过程依次查询Information\u schema.columns 问题是在这个过程中,查询 从information\u schema.columns中选择column\u name,其中table\u name='recControl\u manager' 不返回任何记录。cctc
recControl\u system\u option
的存储过程,该存储过程依次查询Information\u schema.columns
问题是在这个过程中,查询
从information\u schema.columns中选择column\u name,其中table\u name='recControl\u manager'
不返回任何记录。cctc_读卡器已授予以下权限:
- 每个选择过程
recControl\u system\u选项
有什么建议吗?对象元数据可见性取决于以下权限:
GRANT VIEW DEFINITION ON ... TO cctc_reader;
视图定义权限允许
用户可以查看安全数据库的元数据
在其上授予许可。
但是,查看定义权限
不授予访问的权限
自我保护。例如,用户
它只被授予视图定义
表上的权限可以查看元数据
与中的表相关
sys.objects目录视图。然而,
没有其他权限,例如
选择或控制,用户无法
从表中读取数据
授予权限的正确安全性取决于您的场景。它可以是dbo或其他模式,也可以是数据库本身,也可以是单个表。如果我在你的位置上,我会对recControl\u system\u选项过程进行代码签名,并在服务器级别授予对签名的任何定义,这是一种更好、更安全的使用角色和授予角色权限的方式。有关如何对过程进行签名并对签名授予服务器级权限的示例,请参见。如Remus所述,元数据可视性会影响查询系统表和视图时返回的数据。如果您没有对安全(对象、登录名等)的权限,它将不可见 根据您的情况,您将允许内部调用以所有者身份执行,或将信息_schema.columns包装在udf中,作为
所有者执行
我们在查询元数据时使用这种技术。如果在其他地方发现了这种情况,请创建一个存储过程,调用数据库中的系统存储过程sp_列。您的存储过程可以使用与其他存储过程相同的权限执行。缺点是返回的集合中有许多您可能不感兴趣的列。我敢说你可以改进这场狂欢。我选择在代码中选择字段
CREATE PROCEDURE [dbo].[proc_tblMyTableSchemaGet]
作为
开始
结束太好了!谢谢你的意见。我已经想出了解决这个问题的办法,而你给了我很多思考的食物。。。。!
SET NOCOUNT ON;
exec sp_columns @table_name = 'myTable', @table_owner = 'dbo';