我想创建一个存储过程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
答案 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'