0

在哪种数据库软件/语言中,可以创建一个可供多个用户访问的数据库,除了它的两列只能由管理员用户访问。请详细说明如何创建此数据库。

4

3 回答 3

1

Oracle 可以使用视图来做到这一点,但更“正确”的方法是使用具有列屏蔽行为的列级虚拟专用数据库,其中敏感列对非特权用户显示为空。

于 2009-11-04T10:56:49.843 回答
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 权限)。

于 2009-11-04T13:33:16.890 回答
0

在大多数 DBMS(如 Oracle、Mysql、SQL 服务器...)中,您可以授予用户对您想要的任何列的访问权限或撤销任何权限。

于 2009-11-04T10:54:24.730 回答