在某些情况下,当您分发应用程序和数据库时,可能不希望透露过程、函数、触发器和视图中包含的逻辑。作为附加的安全手段,您可以使用 ALTER PROCEDURE、ALTER FUNCTION、ALTER TRIGGER 和 ALTER VIEW 语句的 SET HIDDEN 子句来隐藏这些对象的内容。
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; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |