글을 올렸는데 아무도 관심을 주지 않으셔서 ㅜㅜ 다시 올립니다...
SQL 2000 기준 로그인, 사용자, 소유자 관련 내용이며, 도움을 청합니다.
웹사이트 하나가 있습니다.
SQL 2000 연결로 돌아가고 있으며, 현재 웹호스팅 서비스를 통해 운영되고 있습니다.
이 웹사이트를 local에 똑같이 세팅하고 테스트 및 개편 작업을 하려고 합니다.
1. HOSTING SERVER
Server Name : xxx.cafe24.com
Login 계정 : w2kh / 1234
DataBase Name : w2kh
사용자 : w2kh
사용자 TABLE : 소유자가 dbo로 되어 있음 (사용자 및 시스템 테이블 모두)
사용자 PROC : 소유자가 w2kh로 되어 있음 (시스템 PROC는 소유자가 dbo)
2. Localhost (테스트 및 작업용 서버)
Server Name : localhost
Login 계정 : sa / 1234
DataBase Name : w2kh
사용자 : sa
사용자 TABLE : 신규 생성 DB로 아직 사용자 TABLE 없음 (시스템 TABLE 만 존재)
사용자 PROC : 신규 생성 DB로 아직 사용자 PROC 없음 (시스템 PROC 만 존재
위 상황에서 Local 작업용 웹사이트를 세팅 합니다.
이어서 DB 세팅도 합니다.
1. HOSTING Server에 있는 DB를 백업받아 해당 백업 파일을 내려 받습니다.
2. localhost의 로그인에 w2kh / 1234 계정을 추가합니다.
3. Database 접근 DB로 w2kh(신규생성)를 지정합니다.
4. w2kh 역할로 public과 db owner를 지정합니다.
5. 내려받은 백업 DB를 복원합니다.
6. localhost의 w2kh 계정이 복원된 DB의 사용자와 연결이 끊어져 있음을 확인합니다.
7. sp_change_users_login 'w2kh', 'w2kh' 명령을 사용해 끊어진 로그인을 연결합니다.
8. 테스트용 웹사이트를 열어 봅니다.
9. 프로시저를 찾을 수 없다며 오류를 냅니다. 하지만 DB접근이나 테이블 엑세스는 정상입니다.
(복원 과정에서 문제가 없었으며 프로시저는 존재하는 상태입니다.)
이것 저것 살펴본 결과..
프로시저의 소유자는 w2kh로 되어 있고 테이블은 dbo로 되어 있음을 확인합니다.
현재 w2kh 계정으로 로그인 했을 때 w2kh소유자로 되어 있는 PROC는 찾지 못하고 dbo가 소유자인 테이블은
정상적으로 엑세스 됩니다.
그래서 이것 저것 해보다가 sp_helpText w2kh.sp_xxxx 라는 식으로 접근을 했더니
해당 프로시저를 찾고 실행까지 됩니다.
개채명 앞에 소유자명(스키마?)를 넣으니 w2kh 계정으로 프로시저를 실행 할 수 있네요...
여기서 질문입니다.
의문 1 : 왜 w2kh가 소유자로 되어있는 프로시저에 w2kh 계정으로 접근하면 개채를 찾지 못하는가?
의문 2 : 왜 sa로 접근을 하면 저장프로시저와 테이블 모두 접근이 가능한가?
의문 3 : 왜 HOSTING Server쪽은 문제 없이 잘 되는데 LOCAL에서 RESTORE 하면 이런 문제가 생기는가?
의문 4 : localhost에서 생성한 로그인 계정 w2kh는 호스팅 서버에서의 w2kh와 다른 계정인가?
이 문제를 해결하기 위해
얼마전 도움의 글이 되었던 "로그인 계정의 서버 역할 지정 없애기" 방법이 큰 도움이 되었습니다.
그리고 이 방법 말고도 모든 개체의 소유자를 dbo로 바꾸 방법도 있었습니다.
문제 해결의 방법은 알고 있지만 지금 저에게 중요한 것은 문제 해결에 대한 단편적 수단이 아니라
왜 이런 상황이 벌어지는가에 대한 원인 규명과 근본적 대처 방법입니다.
지금 이 문제의 원인과 이유를 알아내지 못하면 영원히 묻힐 거 같아서
잘 아시는 분들의 도움을 청합니다.
제가 무엇을 놓쳤고, 어떤 것을 잘못 이해했으며 어떻게 해야 하는지 조언 부탁드립니다.
1. w2kh (유저가) 가 sysadmin 이면 dbo + 테이블 프로시저를 찾음 그래서 w2kh.procname 을 소유자 없이 억세스 하면 찾지 못함
2. sysadmin 이 아닌 유저가 어떤 object 에 접근할때는 w2kh + 테이블 프로시저를 먼저 찾고 없으면, dbo + 테이블 프로시저를 찾음 (이때는 내부적으로 object id 를 기반으로 찾음)
의문1 : 1번에서 설명함
의문2 : sa 로 접근하더라도 w2kh 로 명시하지 않는이상 프로시저를 실행하지 못할듯 한데요...
의문3 : 전 문제 안생기던데요. 계정 만들때 w2kh 에 sysadmin 주신게 아닐까 싶어요~
의문4 : sp_change_user_login 으로 맞추어 주면 같은 계정 입니다.