2013-07-30 3 views
0

몇 줄의 테이블이 있습니다. 이 행은 내 응용 프로그램을 통해서만 수정되어야합니다. 즉, 클라이언트 (예 : HeidiSQL)를 사용하여 수동 편집을 막아야합니다. 그것을 막을 수 있습니까?DB에서 데이터를 수동으로 편집하지 못하게하는 방법은 무엇입니까?

다음 작업을 수행 할 수 있습니다

  • 암호화에게 데이터
  • 암호화 연결 문자열
  • 사용 해시 코드

을하지만 내가 알고 싶은, 그것은 수동을 방지 할 수있다 DB에서 데이터 편집?

모든 DB 공급 업체 (Oracle, SQL, MySQL)는 이러한 유형의 기능을 제공합니까?

+2

가장 좋은 방법은 수동으로 DB는 그/그녀의 권한을 제거하고, 일부 저장 프로 시저 또는 기능을 실행할 수있는 유일한 권한을 부여합니다. – jcho360

+0

아니요, 클라이언트는 RDMS에 ID를 보내지 않으므로 일부 클라이언트의 DB에 액세스하지 못하도록 허용하고 다른 클라이언트는 허용하지 않을 수 있습니다. 사실, 이드는 쉽게 바뀔 수 있기 때문에 쓸모가 없습니다. – user4035

+0

SQL 연결을 노출 할 수 없습니다. – pascal

답변

4

데이터베이스에 대한 사용자 권한을 설정할 수 있습니다. 이것은 당신이 언급 한 모든 DB 관리자들에게 가능합니다.

예 :이 경우 내가 3 개 사용자 권한 유형

  1. (일반 사용자 용) (응용 프로그램에 대한) 읽기/쓰기 권한 읽기 권한이있는
  2. 사용자와 사용자를 만들 것
  3. (문제 해결을 위해,/변경 열 및 테이블 ... 추가) 당신은 해제 할 로그온 트리거 후 사용할 수
0

을 읽기/쓰기 + DBOWNER 권한이있는 관리 사용자 클라이언트를 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

첫 번째 요청은 수동 편집을 방지하는 것이 었습니다. 나는 그가하고있는 일을 알고있는 나쁜 사람이이 해결책을 해결할 수 있다는 것에 동의한다. 하지만 목표가 db를 완전히 확보하는 것이라면 TDE 및 보안 (유료)과 같은 옵션이 있습니다. –

관련 문제