이건 postgresql 에 특성인가요?
데이터베이스를 지정해줬는데 다른 데이터베이스에 떡하니 테이블을 생성해버리네요.
디폴트 권한이 모든 사용자가 사용 가능하도록 되어있습니다.
mysql 개념의 database.tablename 같은 것을 바란다면, 여기서는 schema 라는 것으로 풀어갑니다.
즉, PostgreSQL의 database는 MySQL database 보다 한단계윗 개념입니다. 이게 전통적인 database 개념이구요.
일단 하나의 데이터베이스는 모든 사용자가 접근이 가능하고, 그 데이터베이스 소유주는 이 데이터베이스를 사용할 각 사용자들의 각각의 스키마를 만들어줍니다. 이때, 스키마의 소유주를 각각의 사용자로 할당을 하지요. 일반적으로 이 스키마 이름은 사용자 이름과 같은 것을 사용합니다.
오라클의 경우는 사용자를 하나 만들면, 자동으로 그 사용자의 이름과 같은 스키마가 묵시적으로 만들어지지요.
그래서, select * from a.table1, b.table2 where a.table1.id = b.table2.id
이런식으로 사용하지요.
아무튼, 스키마가 만들어지면, 그때부터는 완벽하게 배타적입니다.
대략적인 이야기를 예문으로 표시하면,
# 쉘에서 psql 관리자id로 실행 $ psql -U postgres mydb2 -- 데이터베이스 만들고 mydb2=# create database mydb3; CREATE DATABASE -- 두명의 사용자를 만들고 mydb2=# create user user1; CREATE USER mydb2=# create user user2; CREATE USER -- 새로 만들었는 DB에 접속해서 mydb2=# \c mydb3 "mydb3" 데이터베이스로 접속했습니다. -- 각각의 스키마를 각각의 사용자 권한으로 만들고 mydb3=# create schema user1 authorization user1; CREATE SCHEMA mydb3=# create schema user2 authorization user2; CREATE SCHEMA -- 첫번째 일반 사용자로 다시 접속해서 mydb3=# \c mydb3 user1 "mydb3" 데이터베이스에 "user1" 사용자로 접속했습니다. -- 테이블을 하나 만들고 mydb3=> create table t (a text); CREATE TABLE -- 두번째 일반 사용자로 접속해서 mydb3=> \c mydb3 user2 "mydb3" 데이터베이스에 "user2" 사용자로 접속했습니다. -- 똑같이 같은 데이터베이스에 같은 테이블을 만들고 mydb3=> create table t (a text); CREATE TABLE mydb3=> insert into t values ('asdf'); INSERT 0 1 -- 이번에는 user1 스키마에 있는 t 테이블을 조회하면, 접근권한 오류발생함 mydb3=> select * from user1.t; ERROR: user1 스키마(schema)의 접근권한이 없음 -- 그래서 다시 사용자 바꾸고 mydb3=> \c mydb3 user1 "mydb3" 데이터베이스에 "user1" 사용자로 접속했습니다. -- 조회를 해보면, user2에서 넣었으니, 여긴 없죠. mydb3=> select * from t; a --- (0건 있음)
8.0에 db 접근 권한 주는 부분이 생겼나 보네요. 해결되었습니다.
아.. 답변 감사합니다.