数据库应用:让你的应用程序不再对数据库的改动“感冒”(一)



原著作者:Jim Czuprynski

大纲 prefix = o ns = \"urn:schemas-microsoft-com:office:office\" />

ORACLE数据库对象改动使得应用中用到数据对象在某段时间内处于无效状态从而带来致命本文讨论些技术可供DBA在实际应用中竟可能地降低数据库改动和应用冲突

正如古时位著名哲学家说那样“唯不变就是变化”DBA职责就是要控制数据库变动使的有序依赖于你IT团队(Team)稳定性和你们开发和支持应用稳定性你们可以从容应付每天甚至于每时每刻地呼叫需要变动数据库结构

自从我负责为客户数据库系统提供24(小时)×7(天)支持以后,其中个工作就是我非常关注让我们应用能够提供持续稳定性能而不需要特定数据库维护而且我发现只要事先规划周密我可以建立个安全层来让应用和它们要访问数据库对象是绝缘

安全层

使用基本视图来隔离应用

就其形式来看个基本视图只不过是view引用了表中所有列当创建了个新表后般会马上创建个基本视图和为这个视图创建个公共同义词(public synonym)然后把必要对象访问权限授权给适当角色

既然oracle允许用DML语句直接操作基本表那我可以把DML重定位到基本视图上从而替代基本表下面就是个例子在HR DEMO模式下个EMPLOYEES我授予了角色OLTPROLE完全访问视图权利

CREATE OR REPLACE VIEW hr.bv_employees AS

SELECT * FROM hr.employees

/

CREATE PUBLIC SYNONYM employees FOR hr.bv_employees;

GRANT SELECT, INSERT, UPDATE, DELETE _disibledevent=>

使用基本视图最大好处就是我可以把精力集中在应用读写数据上和此同时也把应用同破坏性DROP TABLE和TRUNCATE语句隔离同时我也防止了那些“低级DBA”和“过分热心开发者”在匆忙或意外地删除了重要数据库对象

忠告:注意如果往基本表了添加了新基本视图中是不会自动添加这个列除非重新把编译基本视图这是把双刃剑当你达到了隔离应用和数据库对象变动但同时也不能立即得到新增加而且要记住字段上约束是不包括在基本视图中(例如:列有

NOT NULL约束而且没有提供缺省值或者有个CHECK约束)发出INSERT语句会失败


使用基本视图隔离应用访问指定数据

既然可以为视图列指定别名我们可以利用这个特性来限制用户返回数据我们还是使用EMPLOYEES这个表我想限制OLTPUSER角色只能访问必需换句话在插入条雇员信息时候只需要填写那些非空必需列

DROP VIEW hr.bv_employees;

CREATE OR REPLACE VIEW hr.bv_employees (

empid,

fname,

lname,

email,

hire_date,

job_id)

AS

SELECT

employee_id,

first_name,

last_name,

email,

hire_date,

job_id

FROM hr.employees

/



DROP PUBLIC SYNONYM employees;

CREATE PUBLIC SYNONYM employees FOR bv_employees;

GRANT SELECT, INSERT, UPDATE, DELETE _disibledevent=>



现在我以OLTPUSER用户对基本视图bv_employee执行DML语句增加记录时候只需要必要信息


INSERT INTO employees

VALUES (501, \'Damien\', \'McGillicudy\', \'[email protected]\', TO_DATE(\'12/31/1999\'), \'FI_ACCOUNT\');

COMMIT;





SQL> SELECT *

2 FROM employees

3 WHERE empid >= 500

4 ORDER BY empid;



EMPID FNAME LNAME

---------- -------------------- -------------------------

EMAIL HIRE_DATE JOB_ID

------------------------- ------------------- ----------

501 Damien McGillicudy

[email protected] 12/31/1999 00:00:00 FI_ACCOUNT





未完待续

Tags:  数据库应用系统 数据库及其应用 数据库的应用 数据库应用

延伸阅读

最新评论

发表评论