SQL 禁止插入特定列,你想阻止用户或者错误的软件应用程序在某些列中插入数据。例如,你希望一个程序插入数据到 EMP
表,但只允许它插入 EMPNO
、ENAME
和 JOB
列。
SQL 禁止插入特定列 问题描述
你想阻止用户或者错误的软件应用程序在某些列中插入数据。例如,你希望一个程序插入数据到 EMP
表,但只允许它插入 EMPNO
、ENAME
和 JOB
列。
SQL 禁止插入特定列 解决方案
创建一个视图,只暴露那些你希望暴露的列。然后强制所有 INSERT
语句都被传送到该视图。
例如,下面的语句创建了一个视图,暴露出 EMP
表的三个列。
create view new_emps as
select empno, ename, job
from emp
为那些可以向上面三个列中写入数据的用户和程序赋予视图的插入权限。不要把 EMP
表的插入权限授权给用户。这样用户插入数据到 NEW_EMPS
视图后就可以创建新的 EMP
记录,但是他们不能为视图定义里不存在的列提供插入值。
SQL 禁止插入特定列 扩展知识
向一个简单视图插入数据,数据库服务器会把它转换为针对基础表的插入操作。例如,下面的 INSERT
语句。
insert into new_emps
(empno ename, job)
values (1, 'Jonathan', 'Editor')
会被翻译成:
insert into emp
(empno ename, job)
values (1, 'Jonathan', 'Editor')
也可以插入数据到内嵌视图(目前只有 Oracle 支持),但这种做法可能不是很有用。
insert into
(select empno, ename, job
from emp)
values (1, 'Jonathan', 'Editor')
视图插入很复杂。如果不是针对最简单的视图做插入操作,那么问题会立刻变得超级复杂。如果想使用视图插入功能,那么就要仔细研读和全面理解相应的数据库关于此功能的帮助文档。