用户可以直接访问存储过程,但不能访问底层代码

时间:2016-02-26 10:31:18

标签: sql sql-server-2008 tsql

我想创建一个存储过程SP1,它将具有从sys模式中获取数据的脚本。但是,对sys模式没有权限的用户将调用此存储过程。我怎样才能做到这一点?

我这样做基本上是为了掩盖该用户的整个sys架构,但同时允许他查看最少的信息。

基本上我想要这个SP

--Displays Object information
SELECT m.object_id [ObjID]
       ,o.type_desc [ObjType]
       ,o.name [ObjectName]
       ,e.last_execution_time [LastExecutedOn]
       ,create_date [CreatedOn]
       ,modify_date [ModifiedOn]
       , DEFINITION [Data]
FROM sys.SQL_MODULES m
JOIN sys.OBJECTS o
ON m.object_id=o.object_id
LEFT JOIN sys.dm_exec_procedure_stats e
ON e.object_id=o.object_id
WHERE DEFINITION LIKE '%'+@SearchStr+'%'
ORDER BY o.name

1 个答案:

答案 0 :(得分:0)

根据this问题,我相信您可以使用View而不是SP实现此目的。

如果您还需要为@SearchStr变量传递参数,则可以创建一个相应查询视图的SP。所以你的观点将是:

CREATE VIEW vwObjectInfo
AS
    SELECT m.OBJECT_ID [ObjID],
           o.type_desc [ObjType],
           o.name [ObjectName],
           e.last_execution_time [LastExecutedOn],
           create_date [CreatedOn],
           modify_date [ModifiedOn],
           [definition] [Data]
    FROM sys.SQL_MODULES m
    JOIN sys.OBJECTS o ON m.OBJECT_ID = o.OBJECT_ID
    LEFT JOIN sys.dm_exec_procedure_stats e ON e.OBJECT_ID = o.OBJECT_ID

你的SP将是:

CREATE PROCEDURE spSearchObjectInfo
    @SearchStr NVARCHAR(MAX)
AS
BEGIN
    SELECT * FROM vwObjectInfo 
    WHERE Data LIKE '%' + @SearchStr + '%' 
    ORDER BY ObjectName
END

然后,您的用户应该可以使用他们想要的搜索字符串调用SP并获得结果,只需从View中执行SELECT并执行SP,如下所示:

EXEC spSearchObjectInfo 'Some Search String'