2013-07-30 114 views
0

我有一张桌子,只有几行。这些行只能通过我的应用程序进行修改,即我需要防止通过使用客户端(如HeidiSQL)进行手动编辑。可以预防它吗?如何防止在数据库中手动编辑数据?

我可以做到以下几点:

  • 加密数据
  • 加密的连接字符串
  • 使用散列码

但我想知道的,是可以防止手动编辑数据库中的数据?

是否有任何数据库供应商(Oracle,SQL,MySQL)提供这些类型的功能?

+2

以防止用户编辑的最佳方式手动DB是删除他/她的许可,并且只允许执行一些存储过程或函数。 – jcho360

+0

不,客户端不会向RDMS发送标识,因此您不能允许从某些客户端访问数据库并禁止从其他客户端访问数据库。实际上,它是无用的,因为id可以很容易地改变。 – user4035

+0

您无法公开SQL连接。 – pascal

回答

4

您可以在您的数据库上设置用户权限。这在你提到的所有DBmanagers中都是可能的。

例: 在这种情况下,我会做3种用户权限类型

  1. 具有读/写权限(应用程序)
  2. 具有读取权限的用户的用户(一般用户)
  3. 具有读/写+ DBOWNER权限的管理员用户(用于故障排除,更改/添加列和表...)
0

您可以使用登录后触发器TECT客户端和抛出一个异常:

create or replace trigger prevent_sqldeveloper 
after logon on database 
declare 
    v_program varchar2(48); 
    v_sid  number; 
    v_serial# number; 
begin 
    select sid, serial#, program into v_sid, v_serial#, v_program 
    from v$session where sid=sys_context('userenv', 'sid'); 
    if (v_program like 'SQL Developer%') then 
    raise_application_error(-20001, 
     'You''re not allowed to connect from SQL*Developer'); 
    end if; 
end prevent_sqldeveloper; 
/

问候

+0

因为客户端应用程序发送该信息并且可以很容易地进行更改(特别是使用JDBC),所以这无济于事。因此,真正想要更改数据的人只需发送不同的应用程序名称即可。 –

+0

第一个请求是为了防止手动编辑。我同意一些知道自己在做什么的坏人可以解决这个问题。但是如果目标是完全保证数据库的安全,那么就有像TDE和安全(支付)这样的选项。 –