в котором программное обеспечение/язык базы данных можно создать базу данных, доступную нескольким пользователям, за исключением двух столбцов, к которым должен обращаться только пользователь admin. укажите, как можно создать эту базу данных.
Вот пример (из 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 может сделать это с помощью представлений, но более "правильным" способом будет использование виртуальной частной базы данных на уровне столбцов с поведением маскировки столбцов, в котором чувствительные столбцы отображаются как "нулевые" для не-привилегированных пользователей.
В большинстве СУБД, таких как (Oracle, Mysql, SQL-сервер...), вы можете предоставить пользователям доступ к любому столбцу, который вы хотите, или аннулировать любое разрешение.