, в котором программное обеспечение/язык базы данных можно создать базу данных, доступную нескольким пользователям, за исключением двух столбцов для доступа только для пользователя-администратора. укажите, как можно создать эту базу данных., в котором программное обеспечение/язык базы данных может иметь базу данных, доступную для нескольких пользователей, за исключением двух столбцов, к которым должен обращаться только пользователь-администратор
ответ
Вот пример (из 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).
В большинстве СУБД, таких как (Oracle, Mysql, SQL-сервер ...), вы можете предоставить пользователям доступ к любому столбцу, который вы хотите, или аннулировать любое разрешение.
Права на столбцы не могут быть предоставлены непосредственно в Oracle. Вместо этого используется VPD или виды. –
Picky, но вы можете указать INSERT и UPDATE на уровне столбца, используя обновление ([столбец], [столбец] ...) на [таблице] на [пользователь]; Но это не касается выбора. –
Oracle может сделать это с помощью представлений, но более «правильным» способом будет использование виртуальной частной базы данных уровня столбца с поведением маскировки столбцов, в котором чувствительные столбцы отображаются как недействительные для не-привилегированных пользователей.
Для функциональности VPD требуется лицензия Enterprise Edition. Кроме того, хотя Row Level Security была введена в 8.1.7.4, эквивалентная безопасность уровня столбца была новой для 10gR2. – APC
Не было бы лучше просто создать представление? – MSalters
Клиент хочет, чтобы я использовал его базу данных, но он не хочет, чтобы я имел доступ к двум столбцам в таблице – silverkid
. Что вы подразумеваете под созданием представления? – silverkid