如何防止在DB中手动编辑数据?

时间:2013-07-30 12:44:58

标签: mysql sql database oracle database-design

我有一张几行的桌子。这些行只能通过我的应用程序修改,即我需要通过使用客户端(例如HeidiSQL)来防止手动编辑。有可能阻止它吗?

我可以做以下事情:

  • 加密数据
  • 加密连接字符串
  • 使用哈希码

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

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

2 个答案:

答案 0 :(得分:4)

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

实施例: 在这种情况下,我将使用3种用户权限类型

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

答案 1 :(得分:0)

您可以使用登录后触发器来检测客户端并引发异常:

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;
/

此致