我在控制数据库中数据的访问方面遇到了问题。这些数据是我公司的价格数据和从数据提供商处购买的价格数据的混合,因为他们按每个可以访问数据的用户收费,我需要能够限制对数据的访问。
我有一个方案“DATA”,它包含所有价格数据。我想有两个额外的方案(例如:LIM_ACCESS和FULL_ACCESS)和VIEWS构建在DATA方案上。例如:
CREATE VIEW LIM_ACCESS.V_PRICES AS<br>
SELECT [] FROM DATA.PRICES<br>
WHERE SOURCE = [MyCompany]
CREATE VIEW FULL_ACCESS.V_PRICES AS<br>
SELECT [] FROM DATA.PRICES
但根据我的经验,LIM_ACCESS-和FULL_ACCESS方案必须在DATA-tables上有select-privelige来创建视图,然后我回到方块1。
作为数据库的新手,我觉得必须有一个相对简单的解决方案,所以任何建议或提示(如果此问题已被提出并在之前得到解答)表示赞赏: - )
亲切的问候,
斯文
答案 0 :(得分:2)
您可以将所有视图放在DATA架构中。然后根据需要将GRANT SELECT
发送到其他模式,最好是通过Woot4Moo建议的数据库角色。
答案 1 :(得分:0)
使用视图不会阻止用户子集访问数据。您需要做的是实现行级安全性。
另一种方法是使用某种形式的基于角色的权限,该权限仅允许您要访问“付费”信息的特定用户组。这可以通过以下示例来完成。
create user foo
identified by password;
- 没有权限
create role paid_data;
- 为此paid_data
角色
grant paid_data to foo
用户foo
现在将拥有paid_data
角色拥有的权限。使用这样的角色的好处是,您可以快速撤销该组中的每个人的访问权限/添加更多访问权限,因为它们需要合并。
答案 2 :(得分:0)
正如GriffeyDog所说,这是最好的方法。首先在架构中创建两个视图,然后将这些视图的select选择授予这两个用户。
CREATE VIEW LIM_ACCESS_V_PRICES AS<br>
SELECT [] FROM DATA.PRICES<br>
WHERE SOURCE = [MyCompany];
GRANT SELECT ON LIM_ACCESS_V_PRICES TO LIM_ACCESS;
CREATE VIEW FULL_ACCESS_V_PRICES AS<br>
SELECT [] FROM DATA.PRICES;
GRANT SELECT ON FULL_ACCESS_V_PRICES TO FULL_ACCESS;
答案 3 :(得分:0)
另一种方法是使用Oracle Row Level Security,也称为Oracle Label Security。我已经用它来大大简化我的应用程序设计,同时确保用户只能看到他们可以看到的数据。