본문 바로가기
  • 시 쓰는 개발자
1일 1개념정리 (24년 8월~)/데이터베이스

1일1개 (41) - SQL 레퍼런스

by poetDeveloper 2024. 9. 23.
반응형

1일 1개념정리 24.08.09.금 ~ 

 

큰 결정에 큰 동기가 따르지 않을 때도 있다. 하지만 큰 결심이 따라야 이뤄낼 수 있다.

무조건 무조건 1일 1개의 개념 정리하기 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!


#41. SQL 레퍼런스

DB공부를 하다가 레퍼런스라는 게 나왔다.

grant reference (dept_name) on department to Mariano;

일단 이게 뭘까 ? Select insert 이런 것에만 익숙한 나에겐 생소했다. SQL 레퍼런스에 대해 알아봅시다.

 

References

이는 외래키를 생성할 때 필요한 기능이다. 예를 들면, 학생 테이블에서 "학과이름"이라는 열이 "학과"테이블에 있는 학과이름 컬럼을 참조해야한다면 ? 학생 테이블의 값은 학과 테이블의 값을 가져야한다는 제약이 걸린다. 이런 관계를 설정할 때 레퍼런스를 사용한다. 즉, 외래키 제약을 걸고 특정 열을 참조할 수 있도록 허용하는 권한이다.

주의할 것은, 참조만 허용할 뿐 해당 테이블의 데이터를 읽는 등의 권한을 준다는 것은 아니다. 별개의 내용이다.

grant reference (dept_name) on department to Mariano;

 

그니까 처음에 있었던 SQL 예시를 다시 보면 마리아노가 department 테이블의 dept_name 열을 참조하는 외래키를 만드는 권한을 주는 것이지, 읽을 수 있다는 것과는 별개이다.

 

왜 필요한가 ?

권한은 특정 사용자가 다른 테이블의 열을 참조하는 외래 키를 생성할 수 있도록 허용한다. 이 권한이 없으면 Mariano는 해당 열을 참조하는 외래 키를 생성할 권한이 없다.
이 권한이 필요한 이유는 무결성을 지키고 테이블간 상호작용을 제어하기 위함이다. 테이블간 종속성을 만드는 것은 허가된 사용자만 할 수 있다는 것이다.

 

레퍼런스로 외래키 생성하면 Select, Insert 등의 작업 가능 ?

외래 키 참조 권한을 가진다 해서 해당 테이블을 바로 읽을 수 있는 것은 아니다. 레퍼런스 권한은 그냥 특정 열을 외래키로 참조하는 것을 허용한다는 것일 뿐, 그 열을 포함해서 데이터를 조회하거나 수정하는 등의 권한을 주는 것이 아니다. 그래서 예를들면 다음과 같이 따로 권한을 부여받아야한다.

GRANT SELECT ON department TO Mariano;

 

반응형