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

0

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

  • 1
    Разве не было бы лучше просто создать представление?
  • 0
    клиент хочет, чтобы я использовал его базу данных, но не хочет, чтобы я обращался к двум столбцам в таблице
Показать ещё 1 комментарий
Теги:
database
permissions
rights

3 ответа

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).

1

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

  • 0
    Для работы VPD требуется лицензия Enterprise Edition. Кроме того, хотя защита на уровне строк была введена в 8.1.7.4, эквивалентная защита на уровне столбцов была новой для 10gR2.
0

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

  • 0
    Привилегии столбцов не могут быть предоставлены непосредственно в Oracle. Вместо этого используется VPD или просмотры.
  • 0
    Придирчиво, но вы можете предоставить INSERT и UPDATE уровня столбца, используя обновление обновления ([column], [column] ...) для [table] для [user]; Но это не касается выбора.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню