当您分发应用程序和数据库时,可能不希望透露过程、函数、触发器、事件和视图中包含的逻辑。作为附加的安全手段,您可以使用 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; |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |