限制最终用户使用存储过程插入数据

Posted

技术标签:

【中文标题】限制最终用户使用存储过程插入数据【英文标题】:restricting end users to insert data using a stored procedure 【发布时间】:2011-03-14 05:44:59 【问题描述】:

使用存储过程,我如何限制用户使用插入查询插入的内容,这可以使用视图的 WITH CHECK OPTION 进行限制?

就像我只希望 steve 和 peter 将数据插入到 ITEM 表中。我在包含所有用户名的 ITEM 表中添加了一个“用户”列。 为此,如果我使用视图,那么在我给出的检查选项中:

WHERE username='steve' OR username='peter' WITH CHECK OPTION

但是我如何使用存储过程来做到这一点?

【问题讨论】:

【参考方案1】:

类似的东西。您必须先测试用户并决定是否允许。可以将测试包装到另一个存储过程或 UDF 中以供重复使用。

问题:您的视图如何知道 Steve 或 Peter 是执行视图的人?

CREATE PROC myProc
   @p1 int
AS
SET NOCOUNT ON

BEGIN TRY
    IF SUSER_SNAME() NOT IN ('steve', 'peter')
       RAISERROR ('Oi: Steve and Peter only', 16, 1)

END TRY
BEGIN CATCH
   ...
END CATCH
GO

在这里查看我的答案stored proc template

【讨论】:

史蒂夫将登录到应用程序。所以当他执行视图时,视图会检查他的用户名。因为我的表之前已经插入了用户名

以上是关于限制最终用户使用存储过程插入数据的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver存储过程 限制字段长度

oracle存储过程效率问题,处理1500w的数据插入

如何限制存储过程中的任何 DML 操作

在存储过程中插入或更新用户定义的表类型

使用存储过程插入表?

使用对存储过程具有执行权限的 SQL 用户插入 SQL 动态查询