如何避免用户添加用户存储过程名称,如sp_%

时间:2011-09-28 10:29:22

标签: sql-server database stored-procedures

有人告诉我, DMF管理政策和条件可以做到这一点。有人知道如何实现这一点。

2 个答案:

答案 0 :(得分:2)

是的,您可以通过基于策略的管理来完成此操作。您为 Facet 的过程创建条件,参数 @Name NOT LIKE'sp_%'。然后,为条件创建政策,您可以按需或按计划强制执行此操作。

答案 1 :(得分:2)

  1. 打开SQL Management Studio
  2. 转到“管理” - >条件 - >创建新条件
  3. 输入条件的名称。
  4. 选择Facet“存储过程”
  5. 在“字段”@name
  6. 列中输入
  7. 在“运营商”栏目中输入“不喜欢”
  8. 在“值”'sp [_]%'
  9. 列中输入
  10. 点击确定以保存

  11. 制定政策。转到“管理” - >政策 - >创建新政策

  12. 输入政策名称
  13. 在下拉菜单“检查条件”
  14. 中选择条件的名称
  15. 将“评估模式”设置为“正在更改:预防”
  16. 启用政策
  17. 单击确定以保存并启用策略

  18. 通过输入新查询来测试政策

  19.   

    CREATE PROCEDURE sp_test      @LastName nvarchar(50),      @FirstName nvarchar(50)   AS

         

    设置NOCOUNT ON;      SELECT FirstName,LastName,Department      来自HumanResources.vEmployeeDepartmentHistory      WHERE FirstName = @FirstName AND LastName = @LastName      AND EndDate IS NULL;   GO

    结果如下:

      

    >违反了政策'StoredProcNamingPolicy' > 'SQLSERVER:\ SQL \ DB01 \ DEFAULT \数据库\ MYDB \ StoredProcedures \ dbo.sp_test'。    此事务将被回滚。    政策条件:'@Name NOT LIKE'sp [_]%''    政策说明:''    其他帮助:'':''    声明:'创建程序sp_test      @LastName nvarchar(50),      @FirstName nvarchar(50)    AS

         

    设置NOCOUNT ON;      SELECT FirstName,LastNam ...'。    消息3609,级别16,状态1,过程sp_syspolicy_dispatch_event,第65行    交易在触发器中结束。批次已中止。