오늘은 큐브리드 데이터베이스에 로컬(localhost, 127.0.0.1) 접속 시 다른 계정에서 접속할 때 발생하는 에러에 대해서 확인해 보고, 원인 분석 및 해결 방안을 알려드리겠습니다.
Table Of Contents
로컬 접속시 에러 분석하기
큐브리드 로컬 접속시 Permission denied 에러가 발생하였습니다.
$ csql tpcc
Cannot make connection to master server on host "localhost".... Permission denied
Failed to connect to database server, 'tpcc', on the following host(s): localhost
ERROR: Failed to connect to database server, 'tpcc',
무언가 접근하는 파일 문제로 보여서 strace를 통해 어떤 파일들에 접근해서 권한 문제가 생기는지 확인해 보았습니다.
다음 명령을 통해 확인한 결과 cubrid unix socket 파일에 write 권한이 없어서 접속을 못하는 것으로 확인됩니다.
$ strace csql tpcc >& log
$ grep "Permission denied" log
openat(AT_FDCWD, "/home/cubrid/CUBRID-11.2.8.0824-bf70ab7-Linux.x86_64/log/cub_client.err", O_RDWR) = -1 EACCES (Permission denied)
openat(AT_FDCWD, "/home/cubrid/CUBRID-11.2.8.0824-bf70ab7-Linux.x86_64/log/cub_client.err", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 EACCES (Permission denied)
openat(AT_FDCWD, "/home/cubrid/CUBRID-11.2.8.0824-bf70ab7-Linux.x86_64/log/cub_client.err", O_RDWR) = -1 EACCES (Permission denied)
openat(AT_FDCWD, "/home/cubrid/CUBRID-11.2.8.0824-bf70ab7-Linux.x86_64/log/cub_client.err", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 EACCES (Permission denied)
connect(4, {sa_family=AF_UNIX, sun_path="/tmp/CUBRID1523"}, 110) = -1 EACCES (Permission denied)
write(2, "Cannot make connection to master"..., 82Cannot make connection to master server on host "localhost".... Permission denied
$ ls -l /tmp/CUBRID1523
srwxrwxr-x 1 cubrid cubrid 0 Mar 25 14:37 /tmp/CUBRID1523
문제 해결 방법
문제를 해결하는 방법은 두 가지가 있을 수 있습니다.
1. 파일을 사용하지 않는 원격 tcp 접속을 한다.
문제를 해결하기 위해서 원격 tcp 소켓으로 접속하면 문제가 해결됩니다.
~$ csql -C tpcc@127.0.0.1 -u tpcc -p tpcc
Cannot make connection to master server on host "127.0.0.1".... Permission denied
Failed to connect to database server, 'tpcc', on the following host(s): 127.0.0.1
ERROR: Failed to connect to database server, 'tpcc', on the following host(s): 127.0.0.1
$ csql -C tpcc@192.168.21.32 -u tpcc -p tpcc
CUBRID SQL Interpreter
Type `;help' for help messages.
csql> show tables;
=== <Result of SELECT Command in Line 1> ===
Tables_in_tpcc@192.168.21.32
======================
'posts'
1 row selected. (0.029949 sec) Committed. (0.000114 sec)
1 command(s) successfully processed.
csql>
2. 해당 UNIX 소켓 파일의 권한이 있는 같은 그룹으로 만들어 준다.
다른 방법으로 접속하려는 계정을 cubrid와 같은 그룹으로 묶어주면 됩니다.
예를 들어 testuser를 cubrid 그룹에 묶어주려면 다음과 같이 합니다.
~$ groups cubrid
cubrid : cubrid
~$ sudo usermod -a -G cubrid testuser
이렇게 해주고 나서 새로운 터미널을 열어서 접속하면 정상적으로 접속됩니다.
~$ csql tpcc
CUBRID SQL Interpreter
Type `;help' for help messages.
csql> quit
csql>