2009-11-04 2 views
0

, в котором программное обеспечение/язык базы данных можно создать базу данных, доступную нескольким пользователям, за исключением двух столбцов для доступа только для пользователя-администратора. укажите, как можно создать эту базу данных., в котором программное обеспечение/язык базы данных может иметь базу данных, доступную для нескольких пользователей, за исключением двух столбцов, к которым должен обращаться только пользователь-администратор

+1

Не было бы лучше просто создать представление? – MSalters

+0

Клиент хочет, чтобы я использовал его базу данных, но он не хочет, чтобы я имел доступ к двум столбцам в таблице – silverkid

+0

. Что вы подразумеваете под созданием представления? – silverkid

ответ

1

Вот пример (из Oracle) использования представления для контроля доступа к экрану доступа к некоторым столбцам в базе данных. Обратите внимание, что мы можем дополнительно ограничить, какие столбцы можно обновить.

SQL> conn apc/apc 
Connected. 
SQL> desc emp 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
EMPNO          NOT NULL NUMBER(4) 
ENAME          NOT NULL VARCHAR2(10) 
JOB            VARCHAR2(9) 
MGR            NUMBER(4) 
HIREDATE           DATE 
SAL            NUMBER(7,2) 
COMM            NUMBER(7,2) 
DEPTNO            NUMBER(2) 

SQL> create or replace view v_emp as 
    2 select empno, ename, job, mgr, hiredate, deptno from emp 
    3/

View created. 

SQL> grant select, insert, update (job, mgr, deptno) on v_emp to a 
    2/

Grant succeeded. 

SQL> conn a/a 
Connected. 
SQL> create synonym emp for apc.v_emp 
    2/

Synonym created. 

SQL> select * from emp where deptno = 10 
    2/

    EMPNO ENAME  JOB    MGR HIREDATE  DEPTNO 
---------- ---------- --------- ---------- --------- ---------- 
     7782 BOEHMER MANAGER   7839 09-JUN-81   10 
     7839 SCHNEIDER PRESIDENT   17-NOV-81   10 
     7934 KISHORE CLERK   7782 23-JAN-82   10 

SQL> update emp set deptno = 40 where empno = 7934 
    2/

1 row updated. 

SQL> insert into emp values (8000, 'APC', 'DOGSBODY', 7934, sysdate, 40) 
    2/

1 row created. 

SQL> update emp set hiredate = sysdate-720 where empno = 7934 
    2/
update emp set hiredate = sysdate-720 where empno = 7934 
     * 
ERROR at line 1: 
ORA-01031: insufficient privileges 


SQL> delete from emp where empno = 7934 
    2/
delete from emp where empno = 7934 
      * 
ERROR at line 1: 
ORA-01031: insufficient privileges 


SQL> 

Это сравнительно простой пример, потому что точка зрения один-к-одному с таблицей и экранированные колонки не являются обязательными .; Если экранированные столбцы были определены как NOT NULL, тогда мне понадобился бы триггер INSTEAD OF по умолчанию или получить значения INSERT (или мне пришлось бы использовать привилегию INSERT).

0

В большинстве СУБД, таких как (Oracle, Mysql, SQL-сервер ...), вы можете предоставить пользователям доступ к любому столбцу, который вы хотите, или аннулировать любое разрешение.

+0

Права на столбцы не могут быть предоставлены непосредственно в Oracle. Вместо этого используется VPD или виды. –

+0

Picky, но вы можете указать INSERT и UPDATE на уровне столбца, используя обновление ([столбец], [столбец] ...) на [таблице] на [пользователь]; Но это не касается выбора. –

1

Oracle может сделать это с помощью представлений, но более «правильным» способом будет использование виртуальной частной базы данных уровня столбца с поведением маскировки столбцов, в котором чувствительные столбцы отображаются как недействительные для не-привилегированных пользователей.

+0

Для функциональности VPD требуется лицензия Enterprise Edition. Кроме того, хотя Row Level Security была введена в 8.1.7.4, эквивалентная безопасность уровня столбца была новой для 10gR2. – APC