在哪种数据库软件/语言中,可以创建一个可供多个用户访问的数据库,除了它的两列只能由管理员用户访问。请详细说明如何创建此数据库。
问问题
117 次
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 回答