0

我在控制对数据库中数据的访问时遇到问题。这些数据是我公司的价格数据和从数据提供商处购买的价格数据的混合体,由于它们按可以访问其数据的用户收费,因此我需要能够限制对数据的访问。

我有一个包含所有价格数据的方案“DATA”。我正在考虑有 2 个额外的方案(例如:LIM_ACCESS 和 FULL_ACCESS)以及基于 DATA 方案构建的 VIEWS。例子:

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-schemes 必须在 DATA 表上具有 select-privelige 才能创建视图,然后我回到第 1 格。

作为数据库的新手,我觉得必须有一个相对简单的解决方案,所以任何建议或提示(如果这个问题之前已经被问过和回答过)都会受到赞赏:-)

亲切的问候,
斯文德

4

4 回答 4

2

您可以将所有视图放在 DATA 模式中。然后GRANT SELECT根据需要将它们添加到其他模式,最好是通过 Woot4Moo 建议的数据库角色。

于 2013-01-10T22:01:59.843 回答
0

视图的使用不会阻止一部分用户访问数据。您需要做的是实现行级安全性。

另一种方法是使用某种形式的基于角色的权限,它只允许您想要访问“付费”信息的特定用户组。这可以相当简单地完成,示例如下。

create user foo  
identified by password;  

--没有权限

create role paid_data;  

--在此处为paid_data角色授予权限

grant paid_data to foo

用户foo现在将拥有该paid_data角色所拥有的权限。使用这样的角色的优点是您可以快速撤消该组中每个人的访问权限/添加更多访问权限,因为他们需要合并。

于 2013-01-10T21:23:13.673 回答
0

另一种方法是使用 Oracle行级安全性,也称为 Oracle 标签安全性。我用它来极大地简化我的应用程序设计,同时确保用户只能看到他们被允许看到的数据。

于 2013-01-30T06:55:06.160 回答
0

As GriffeyDog suggested, this is the best way to do it. First create two views in your schema and then grant select on those views to the two users.

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;
于 2013-01-11T08:07:37.693 回答