我有一张名为Grades的表,其中包含学生的成绩。我还创建了一个名为Student的角色和一个名为Bob的用户。学生被授予鲍勃。我希望鲍勃能够查看他和他的成绩。我不是在编写应用程序而是编写数据库模式。我试图创建这个视图
CREATE VIEW My_Grades AS SELECT * FROM Grades WHERE <and here is my issue>
我的问题是我需要一种方法让oracle确保Bob确实有权查看他要求的成绩。例如,我可以在表格Grades中添加名为User_Id的uid的列,然后执行
CREATE VIEW My_Grades AS SELECT * FROM Grades WHERE User_Id = uid
我指的是作为Oracle保留字的uid。我有两个问题:
答案 0 :(得分:4)
使用该视图的解决方案将起作用,但随着系统的增长可能会失控。如果您采用这种方法,您可能希望以user
(名称)而不是uid
(内部ID)为基础。
Oracle有一个名为&#34; Virtual Private Database&#34;的功能。这可以用来实现你想要的。
从上面的链接:
Oracle虚拟专用数据库(VPD)使您可以创建安全性 用于控制行和列级别的数据库访问的策略。 实质上,Oracle虚拟专用数据库添加了动态WHERE 对于表,视图或者发出的SQL语句的子句 Oracle Virtual Private Database安全策略的同义词 应用了。