使用 SQL Server 2012。 您可以使用 TSQL 获取存储过程列表,如下所示:
select * from information_schema.routines r where r.ROUTINE_TYPE = 'PROCEDURE'
有没有办法只获取仅读取数据的存储过程的子集(即不要尝试在其中执行 INSERT 或 UPDATE 语句,或它们调用的任何存储过程)。
我认为这个问题的答案是否定的,但只是将其放在这里以防万一。
最终目标是尝试创建一个只能读取数据库中的数据而不能修改它的数据库角色。 db_datareader 角色有帮助,但也希望能够调用仅读取数据的存储过程。最后的手段是授予每个存储过程的执行权限。
最佳答案
假设您的存储过程编码是一致的(例如,您始终使用 EXEC
显式调用存储过程而不仅仅是其名称),那么您可以使用以下代码获得良好的开端。
SELECT Object_Name(object_id)
, *
FROM sys.sql_modules
WHERE definition NOT LIKE '%EXEC %'
AND definition NOT LIKE '%INSERT%'
AND definition NOT LIKE '%UPDATE%'
AND definition NOT LIKE '%DELETE%'
AND definition NOT LIKE '%MERGE%'
关于sql-server - 是否可以获取仅读取数据的存储过程列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18351368/