ความปลอดภัยระดับคอลัมน์


9

ฉันต้องการโซลูชันเพื่อซ่อนคอลัมน์เฉพาะในตาราง เรามีผู้ที่ต้องการสร้างรายงานจากฐานข้อมูลนี้และเฉพาะบางส่วนของตารางเหล่านี้ด้วยข้อมูลที่เป็นความลับ แต่ไม่ได้รับอนุญาตให้ดูรายการเช่นเงินเดือนหรือ ssn เป็นไปได้หรือไม่ที่จะกรองคอลัมน์เฉพาะสำหรับผู้ใช้


1
Oracle เวอร์ชันใด (10.1 / 10.2 / 11.1 / 11.2) และคุณใช้ Enterprise Edition / Standard Edition รวมทั้งคุณมีตัวเลือกลิขสิทธิ์เพิ่มเติม (Oracle Advanced Security เป็นต้น)
Philᵀᴹ

10g R2 Enterprise Edition ไม่มีฟีเจอร์ลิขสิทธิ์เพิ่มเติมที่ฉันรู้
Robert

คำตอบ:


13

คุณสามารถทำได้ด้วยมุมมองปกติตราบใดที่ผู้ใช้ที่เกี่ยวข้องยังไม่สามารถเข้าถึงตารางฐานได้

เช่น:

SQL> create user reportuser identified by reportuser;

User created.

SQL> grant create session to reportuser;

Grant succeeded.

SQL> grant create synonym to reportuser;

Grant succeeded.

SQL> select user from dual;

USER
------------------------------
PHIL

SQL> create table basetable
(
  id number primary key,
  viewable varchar2(30),
  secret varchar2(30)
);

Table created.

SQL> insert into basetable values ( 1, 'hello world','this is secret' );

1 row created.

SQL> commit;

Commit complete.

SQL> create view reportview
as
select id, viewable
from basetable;

View created.

SQL> grant select on reportview to reportuser;

Grant succeeded.

SQL> conn reportuser/reportuser
Connected.
SQL> select * from phil.basetable;
select * from phil.basetable
                   *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> select secret from phil.basetable;
select secret from phil.basetable
                        *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> select * from phil.reportview;

        ID VIEWABLE
---------- ------------------------------
         1 hello world

SQL>

หากคุณเพิกถอนการอนุญาตในตารางที่มีปัญหา & สร้างมุมมองพร้อมกับคำพ้องความหมายสำหรับมุมมองผู้ใช้แต่ละคนที่มีชื่อเดียวกับตารางเดิมมันควรจะโปร่งใส

เช่น:

SQL> select user from dual;

USER
------------------------------
REPORTUSER

SQL> create synonym basetable for phil.reportview;

Synonym created.

SQL> select * from basetable;

        ID VIEWABLE
---------- ------------------------------
         1 hello world

SQL>

คุณสามารถทำได้ด้วยVirtual Private Databaseแต่ฉันคิดว่ามันเป็นตัวเลือกลิขสิทธิ์ที่มีราคาแพงเป็นพิเศษ คุณใช้ DBMS_RLS เพื่อกำหนดค่านโยบายความปลอดภัยที่เกี่ยวข้องที่คุณต้องการ


ขอบคุณสำหรับคำตอบโดยละเอียด ไม่มีทางที่คุณจะรู้ตัวกรองตารางจริง นี่จะเป็นวิธีที่สะอาดกว่าสำหรับเราเนื่องจากเรามีตารางจำนวนมากที่จะทำเช่นนี้ วิธีแก้ปัญหาของคุณอาจทำงานได้
Robert

2
หากคุณเพิกถอนการอนุญาตในตารางที่เป็นปัญหา & สร้างมุมมองพร้อมกับคำพ้องความหมายสำหรับผู้ใช้แต่ละคนที่มีชื่อเดียวกันกับตารางดั้งเดิมมันควรจะโปร่งใส
Philᵀᴹ

ตกลง ... ที่เหมาะสม ฉันไม่ได้คิดถึงการสร้างคำเหมือนสำหรับผู้ใช้ ดังนั้นฉันต้องสร้างผู้ใช้การรายงานให้สิทธิ์การเข้าถึงตารางทั้งหมดจากนั้นลบตารางเฉพาะที่ฉันกังวล หลังจากนั้นเริ่มสร้างมุมมองเพื่อซ่อนคอลัมน์
Robert

ได้! หากมีคำถามเพิ่มเติมสามารถกลับมาถามได้ฟรี อย่าลืมทดสอบ :)
ฟิลิป
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.