Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Anywhere 服务器 - SQL 用法 » 存储过程、触发器、批处理和用户定义的函数

 

隐藏过程、函数、触发器、事件或视图的内容

要分发应用程序和数据库而不透露过程、函数、触发器、事件和视图中包含的逻辑,可使用 ALTER PROCEDURE、ALTER FUNCTION、ALTER TRIGGER、ALTER EVENT 和 ALTER VIEW 语句的 SET HIDDEN 子句来隐藏这些对象的内容。

前提条件

您必须是对象的所有者,具有 ALTER ANY OBJECT 系统特权或者具有以下其中一种特权:

  • 过程和函数   ALTER ANY PROCEDURE 系统特权

  • 视图   ALTER ANY VIEW 系统特权

  • 事件   MANAGE ANY EVENT 系统特权

  • 触发器  

    • ALTER ANY TRIGGER 系统特权
    • 基础表的 ALTER 特权和 CREATE ANY OBJECT 系统特权
    • 对于视图上的触发器,您必须拥有 ALTER ANY TRIGGER 和 ALTER ANY VIEW 系统特权

上下文和注释

SET HIDDEN 子句会对关联对象的内容进行模糊处理,使之难以理解,但这些对象仍然可以使用。还可以卸载对象并将其重新装入其它数据库。

修改是无法撤消的,会删除对象的原始文本。因此需要在数据库外保留对象的原始数据源。

使用调试程序进行调试时不会显示过程定义,对过程进行分析时也不会显示数据源。

注意

将 preserve_source_format 数据库选项设置为 On 时,数据库服务器会保存来自过程、视图、触发器和事件的 CREATE 和 ALTER 语句的格式化源代码,并将其置于相应系统视图的源列。在本例中,对象定义和源代码定义同时隐藏。

但是,将 preserve_source_format 数据库选项设置为 On 并不会 阻止 SET HIDDEN 子句删除对象的原始源代码定义。

 任务
  • 使用带有 SET HIDDEN 子句的相应 ALTER 语句。

    选项 操作
    隐藏单个对象

    执行带有 SET HIDDEN 子句的相应 ALTER 语句,以隐藏单个过程、函数、触发器、事件或视图。

    隐藏特定类型的所有对象

    循环执行带有 SET HIDDEN 子句的相应 ALTER 语句,以隐藏所有过程、函数、触发器、事件或视图。

结果

执行自动提交。对象定义不再可见。隐藏后的对象仍可直接引用,也仍可在查询处理中使用。

执行以下循环以隐藏所有过程:



BEGIN
    FOR hide_lp as hide_cr cursor FOR
        SELECT proc_name, user_name
        FROM SYS.SYSPROCEDURE p, SYS.SYSUSER u
        WHERE p.creator = u.user_id
        AND p.creator NOT IN (0,1,3)
    DO
        MESSAGE 'altering ' || proc_name;
        EXECUTE IMMEDIATE 'ALTER PROCEDURE "' ||
            user_name || '"."' || proc_name
            || '" SET HIDDEN'
    END FOR
END;

 另请参见