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

SQL Anywhere 12.0.1 » SQL Anywhere 服务器 - SQL 的用法 » 存储过程、触发器、批处理和用户定义的函数

 

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

当您分发应用程序和数据库时,可能不希望透露过程、函数、触发器、事件和视图中包含的逻辑。作为附加的安全手段,您可以使用 ALTER PROCEDURE、ALTER FUNCTION、ALTER TRIGGER、ALTER EVENT 和 ALTER VIEW 语句的 SET HIDDEN 子句来隐藏这些对象的内容。

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

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

注意

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

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

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

在已经隐藏的对象上运行上面任何一个语句不会产生任何结果。

要隐藏特定类型的所有对象的文本,您可以使用类似于下面的循环:



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;
 另请参见