2012-01-08 4 views
0

SQL 쿼리가 데이터베이스의 데이터을 변경하지 않도록하는 가장 좋은 방법은 무엇입니까?SQL 쿼리가 읽기 전용인지 확인하십시오

내 시나리오에서는 데이터베이스 계층에 대한 액세스 권한이 없으며 응용 프로그램 계층에서만이 논리를 수행 할 수 있습니다.

보석, 루비 사용자 정의 스크립트를 사용 하시겠습니까?

+1

SQL 삽입을 막으려하고 있습니까? –

+0

INSERT, UPDATE, TRUNCATE (등) 쿼리를 사용하지 못하게하고 싶습니다. 오직 SELECT. –

+6

데이터베이스에 대한 읽기 권한 만있는 연결에서 실행 – Andomar

답변

3

사용자의 권한을 관리하여 데이터베이스를 읽을 수 있지만 데이터베이스를 변경할 수는 없습니다 (즉, 삽입, 업데이트 및 삭제할 수 없음). 예를 들어 mysql을 사용하고 있다면 phpmyadmin 또는 이와 동등한 도구에서 쉽게이 작업을 수행 할 수 있습니다.

변경 사항에 따라을 업데이트하십시오. 응용 프로그램을 통해서만 액세스 할 수있는 경우에도 업데이트, 삭제, 삽입 또는 선택 권한이 있거나없는 사용자로 데이터베이스에 계속 연결되어 있으므로 그러한 쿼리가 실행되지 않도록하는 유일한 방법은 변경하는 것입니다 해당 사용자의 권한.

+0

그 대답은 유효하지만 그 질문의 문맥이 명확 해 지도록 업데이트했습니다. –

1

데이터베이스 계층에서 Rails 앱이 사용자가 원하는 액세스 권한 (예 : SELECT)만으로 데이터베이스에 액세스하고 있는지 확인하십시오.

+0

그 답변은 유효하지만, 질문을 업데이트하여 문맥이 더 명확 해졌습니다. –

2

간단하지만 빠를 방법은 삽입, 업데이트 등과 같이 쿼리에 포함 할 수없는 단어 블랙리스트를 사용하는 것입니다. 또는 SQL 쿼리에서 파서를 사용하여 쿼리를 허용할지 여부를 파생시키는 데 필요한 정보 나는 최후의 수단으로 또는 선택 사항이 비교적 간단 할 경우에만 옵션 1을 사용합니다.

0

Sequel은 쓰기 가능한 마스터 데이터베이스가있는 read only slave databases을 지원합니다. 읽기 전용 슬레이브는 SELECT 쿼리를 처리하고 다른 쿼리는 master 데이터베이스에서 처리합니다.

아마도 master 데이터베이스를 nil로 설정할 수 있습니까?

hooks (before_save)을 사용하면 데이터베이스에 쓰는 것을 방지 할 수 있습니다.

관련 문제