2011-03-04 2 views
2

우선, 제 영어는 유감입니다.NHibernate에서 Oracle PL/SQL 저장 프로 시저를 실행하십시오.

모든 DML이 저장 프로 시저 (예 : 클라이언트가 "INSERT ONTO Articles (...")를 직접 실행할 수 없으면 대신 SP "ArticleInsert()"를 호출해야 함) 또한 데이터베이스는 "사용자", "권한", "사용자 _ 권한"과 같은 특수 테이블을 자체 보안 시스템으로 가지고 있습니다. 데이터베이스에 연결할 때 "시스템에 로그인"하기 위해 특수 저장 프로 시저를 실행해야합니다. (예 : "Login (database_user, user_password)")이 데이터베이스를 "알았"때, 나는 누구이며, 내 특권을 알고있다

NHibernate를 사용하여 C# 수정은 풀에서 새 데이터베이스 연결을 사용합니다. 그래서 쓸 때 cl ("INSERT/UPDATE/DELETE"는 저장 프로 시저의 실행으로 대체 될 것입니다.) NHibernate가 새로운 DB 연결을 호출 할 때 "Login (database_user, user_password)"를 어떻게 실행할 수 있습니까? 풀?

그런 작업이 어떻게 해결됩니까?


덕분에

답변

0

난 당신이 조금 바퀴를 개혁하고 생각합니다. 오라클은 모든 RDBMS와 같이 레코드 액세스를 세부적으로 세밀하게 허용합니다. 데이터 권한을 배치하기 위해 그 힘을 사용하지 않는 이유는 무엇입니까?

어쨌든 CRUD 연산의 경우 삽입, 업데이트 및 삭제 작업을 위해 저장 프로 시저를 지정하여 NHibernate의 기본 SQL 생성을 무시할 수 있습니다. 쿼리는 NH의 조건에 있어야합니다. 당신은 검색 저장 프로 시저를 호출하여 객체의 모든 필드와 자식을 강제로로드함으로써 NHibernate의 90 %를 우회합니다. 따라서 필요에 따라 스키마/테이블에서 인증 된 사용자에 대한 SELECT 권한을 허용하려면 최소한 보안을 재 작업해야합니다.

+0

엄격한 Oracle DBA가 애플리케이션을 저장하는 횟수가 거의 안되는 경우 삽입/업데이트/삭제를위한 자신의 포인트가 있다고 생각합니다. 선택 사항에 대해 NH과 함께 할 것을 전적으로 동의합니다.) –

+0

물론 SELECT 조작은 SP가 아닌 표준 NHibernate 메소드를 사용하여 실행됩니다. 저장 프로시 저는 CREATE/UPDATE/DELETE에만 해당됩니다. – JSP

0

이것은 지식의 부족 때문에 재발견하고있는 첫 번째 바퀴가 아닙니다. :)

일부 조직에서는 인사 관리 시스템을 구현한다고 가정 해 봅니다. 이 조직은 자체 하위 부서 등으로 구성된 일련의 부서로 구성됩니다. 그래서, 우리는 계층 구조를 가지고 있으며, 모든 부서가 적어도 세 가지 속성이 있습니다 - ID - PARENT_ID (상위 부서의 ID) - NAME

예를 들어, 우리가 데이터베이스에 SP가 - DeptChangeName (이드, NewName) 우리는 하나의 db 사용자가 ID = 112 및 그 하위가있는 부서에 대해서만 이름을 변경할 수 있고 다른 사용자는 ID가 34 인 dept와 그 자식에 대해서만 이름을 변경할 수 있기를 원합니다. 따라서 권한은 - "DeptChangeName"을 실행할뿐만 아니라 - "ID가 112 인 DeptChangeName을 실행하십시오."

다른 예 - 사용자 "Xxx"는 불확실한 깊이의 ID = 112 아래에 새 하위 부 분을 생성 할 수 있습니다.

이러한 상황이 "수제 밀가루"가없는 오라클 수단으로 해결 될 수 있다면 Google에 적절한 링크 나 구문을 알려주시겠습니까?

관련 문제