database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 5865 게시물 읽기
No. 5865
애플리케이션 작성시 권한관리는 어떻게들 하시는지요?
작성자
김창욱(iyob)
작성일
2005-02-02 11:04
조회수
2,731

안녕하세요?

매일같이 와서 열심히 보고 있습니다.

 

애플리케이션 작성시 권한관리를 어떻게 하시는지 궁금합니다.

(개발 언어는 PHP로 하고 있습니다. 사내에서 리눅스로 서버 만들어 사용중입니다.)

 

그룹별로 사용자별로 읽기, 쓰기, 수정, 삭제 권한을 다르게 주어야 할텐데 이것을 어떻게 구현해서 사용하시는 지 궁금해서요.

 

제가 아는 방법은 ...

 

1. PostgreSQL의 pg_user, pg_shadow 를 사용해서 유저와 그룹을 만든 뒤 테이블당 권한을 할당하는 방법.

- 이 경우에 패스워드 변경이나 사용자 추가, 삭제 등에서 postgres 수퍼유저로 작업을 해야 하므로 응용프로그램에서 비밀번호를 넣어서 사용하기가 보안에 있어 미덥지 못하다는 생각이 듭니다. 이 경우, 사용자가 자기 비밀번호를 바꾸지 못합니다.

 

2. 시스템 테이블이 아닌 그룹과 사용자 테이블을 따로 만들어 프로그램명이나 애플리케이션의 파일명(php파일명)을 사용권한 테이블에 기록한 다음 참조해서 결정한다.

 

일단, 이정도만 생각이 나는군요.

웹환경에서 관리자와 일반사용자만 생각하다 부서별로 사용자, 임원별로 각종 권한을 달리 하려고 하니 머리가 지끈거리는군요.

 

많은 답글 부탁드립니다.

감사합니다.

 

 

이 글에 대한 댓글이 총 5건 있습니다.

저는 웹 어플리케이션의 경우 DB user가 큰 의미가 없지 않을까 생각합니다. 직접 사용자들이 DB에 접속해서 SQL 명령으로 질의를 하는 것이 아니라 웹 어플리케이션이라는 단계를 통해서 접속을 하는 것이므로 DB의 계정을 권한별로 세분화 하기 보다는 DB owner와 사용자로 단순화 하고 사용자의 권한 제어는 웹 어플리케이션 단계에서 하는 것이 더 적당하다고 봅니다.

그리고 table을 따로 만들기 보다는 view를 활용하는 것이 좋을 것 같네요.

박성철(gyumee)님이 2005-02-02 11:22에 작성한 댓글입니다.
이 댓글은 2005-02-02 11:24에 마지막으로 수정되었습니다.

총알같이 빠른 답변에 감사드립니다.

 

일단, 저희 회사는 웹호스팅을 이용하고 있으므로 MySQL로 홈페이지를 운영하고 있고 현재, 자체 서버를 운영할 여건은 아닙니다.

일단 서버가 인트라넷으로 구현이 되었기에 1번째 방법을 언급했던거였습니다.

 

1번째 방법의 경우로 구현했을 때 rule로 변경이나 수정을 했을 시 로그를 current_user로 남기는 등이 가능해서...

view로 제한하는 것도 당연히 생각을 해야겠지요.

 

웹 애플리케이션 단계에서 한다는 말씀을 좀더 구체적으로 말씀해 주실 수 있나요? 어차피 사용자나 그룹에 대한 기록을 가지고 체크해야 할텐데... 어떻게 구현하신다는 말씀이신지요?

 

 

김창욱(iyob)님이 2005-02-02 11:38에 작성한 댓글입니다.

뭐.. 상황에 맞게 만들면 될 것 같지만... 저의 경우 가장 복잡하게 했을 때에는 사용자, 그룹, 어플리케이션, 롤의 네가지 정보를 사용했었습니다.

사용자는 계정 정보이구요. 그룹은 이 사용자들을 그룹으로 묶은 것이 되겠죠. 어플리케이션은 웹 어플리케이션의 모듈들을 등록해 놓은 것이구요. 롤은 몇가지 복잡한 인증 로직을 등록해 놓은 것입니다.

기본적으로 Windows NT의 인증 시스템을 흉내 낸 것이죠.

결국은 특정 사용자 또는 특정 그룹이 특정 어플리케이션에 대해서 특정 롤 권한이 있다는 식의 설정을 할 수 있게 되구요. 이 정보를 별도의 table에 저장해 놓았다가 어플리케이션을 처리하기 전에 매번 확인하도록 하면 될 것 같습니다. 이보다 더 복잡할 수도 있고 간단할 수도 있겠지만 무엇보다 디자인 하시는 시스템에 맞는게 가장 좋겠죠.

박성철(gyumee)님이 2005-02-02 17:46에 작성한 댓글입니다.

구체적인 답변 주셔서 감사합니다.

많은 도움 되었습니다.

다른 분들의 의견도 들어 봤으면 좋겠군요 ^^

김창욱(iyob)님이 2005-02-03 10:19에 작성한 댓글입니다.
이 댓글은 2005-02-03 10:19에 마지막으로 수정되었습니다.

데이터베이스 사용자 계정이 Application 인증을 담당할 경우에는 모든 사용자가 데이터베이스 사용자 계정을 가지고 있어야 할 것이구, 물론 사내의 Intranet이라면 모든 사용자가 계정을 가지고 있어야 하겠지만요..

 

DB User  = Application  User라는 등식이 참이어도, 사용자 신상정보를 구미에 맞추어 DB User에 넣을 수 없는 터라 쪼금은 곤란하겠지요.

 

그 보다는 DB User account를 슈퍼 관리자를 위한 계정, Report를 읽기만 하는 오퍼레이터를 위한 계정, Backup만 하는 DB관리자를 위한 계정, 그리고 신참 DB관리자를 위해 쪼금만 권한을 준 계정 등, DB 관리 업무상으로 역할을 나누어서 계정을 만들어 사용하시는 것이 본래의 용도일것 같구요. (물론 웹 사용자를 위한 읽기만 하는 계정, 쓰기도 하는 계정도 여기에 들어 가겠지요.)

 

Application이 사용하는 전체적인 인증구현은 Application이 요구 하는데로 인증을 DB테이블 구조를 만들어서 응용프로그램이 그것을 사용하여 권한을 읽어들여 Application레벨에서 처리를 하는것이 좋으실 겁니다.

 

저도 php에서 세션을 사용하여 세션 상태에서 사용자 아이디와, 사용자가 속한 그룹을 늘 유지하면서, (로그인시에 읽어들이겠지요) 특정 페이지(화면)가 일정수준의 그룹 퍼미션을 요구하게끔 미리 설정해 두고 사용자가 그 페이지를 요청하면 페이지에서 요구하는 그룹이 세션에 있는 나의 그룹리스트에 있는지를 확인해서 접근권한처리를 하거든요. 게시판도 마찬가지고.

 

그럼 도움이 되셨기를 바랄께요.

떼송이님이 2005-02-11 12:23에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
5869PostgreSQL 백업/복구 방법 [3]
초짜
2005-02-04
10587
5867출력결과테이블 아래 [1][2][3]...[10] 어떻게 해야하져?? [1]
헬프미
2005-02-04
1990
5866server 추가가 안되요 ㅠㅠ [4]
chobo
2005-02-02
2538
5865애플리케이션 작성시 권한관리는 어떻게들 하시는지요? [5]
김창욱
2005-02-02
2731
5863PostgreSQL8.0.0을 사용하기는 좀 이른가요? [5]
2005-02-02
2417
5862현재 FreeBSD에 APM 설치되어 있는데... [2]
눈팅
2005-02-02
1838
5861pg_dump 의 -W 옵션은 어떻게 사용하나요? [1]
가우나라
2005-02-01
2407
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다