将sql plus中的用户限制为表中的单个记录

时间:2011-03-20 16:09:14

标签: sql sqlplus privileges

我有一个员工表......这个表有 5列(empname,empgsm,empsal,empaddr,empdep) ......它有 10条记录。我已经创建了 10个用户,相当于表中的empnames列。当用户使用他的empname登录时,用户名&密码,他只能从表中看到他的记录。

e.g。 Smith是一名员工,创建了一个名为smith的用户。当此用户处于会话状态时,类型"Select * from Employee_table"他只获取属于他的记录,其中empname为smith。

如何使用权限执行此操作?

3 个答案:

答案 0 :(得分:1)

我的建议是在表格上创建视图,其中包含基于当前用户名的条件,如下所示:

select * from employee t
where sys_context('USERENV','SESSION_USER') = t.empname`enter code here

答案 1 :(得分:1)

从标签sqlplus我猜你正在使用Oracle。

在Oracle中,您可以使用细粒度访问控制(即虚拟专用数据库)执行此操作。它的工作原理是在任何sql语句中添加where子句。

如果你有一个基于模式的应用程序,你也可以自己添加一个where子句(其中username = user)。这可能不太安全,但足以满足许多用例

当前登录用户的Oracle用户名在变量“user”中可用。

答案 2 :(得分:0)

如果我们谈论Oracle,GRANT命令将允许用户SELECT一个表,因此可以检索任何行。如果要限制用户对行级别的访问权限,请使用Oracle Label Security 1 2等高级功能。如果您有很高的安全性需求,建议使用此方法,但我更喜欢使用其他机制来验证用户,例如LDAP。