`GRANT` 명령어는 SQL에서 특정 권한을 사용자나 역할에게 부여하는 데 사용됩니다. 권한은 데이터베이스 객체(테이블, 뷰, 프로시저 등)에 대한 액세스를 제어하며, 주로 데이터베이스 보안 및 사용자 관리에 사용됩니다.
### 기본 구문
```sql
GRANT privilege_type ON object TO user [WITH GRANT OPTION];
```
- **`privilege_type`**: 부여할 권한의 종류입니다. 예를 들어 `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `EXECUTE` 등.
- **`object`**: 권한을 부여할 데이터베이스 객체입니다. 예를 들어 테이블, 뷰, 프로시저 등.
- **`user`**: 권한을 부여받을 사용자 또는 역할입니다.
- **`WITH GRANT OPTION`** (선택적): 부여받은 사용자가 이 권한을 다른 사용자에게도 부여할 수 있도록 합니다.
### 예제
1. **테이블에 대한 `SELECT` 권한 부여**
```sql
GRANT SELECT ON employees TO user1;
```
- 이 명령은 `employees` 테이블에 대해 `user1`에게 `SELECT` 권한을 부여합니다. `user1`은 이 테이블에서 데이터를 조회할 수 있습니다.
2. **테이블에 대한 `INSERT`, `UPDATE` 권한 부여**
```sql
GRANT INSERT, UPDATE ON employees TO user2;
```
- 이 명령은 `employees` 테이블에 대해 `user2`에게 `INSERT` 및 `UPDATE` 권한을 부여합니다. `user2`는 이 테이블에 데이터를 삽입하거나 수정할 수 있습니다.
3. **`WITH GRANT OPTION`을 사용하여 권한 전파**
```sql
GRANT SELECT ON employees TO user3 WITH GRANT OPTION;
```
- 이 명령은 `employees` 테이블에 대해 `user3`에게 `SELECT` 권한을 부여하며, `user3`은 이 권한을 다른 사용자에게도 부여할 수 있습니다.
4. **역할에 대한 권한 부여**
```sql
GRANT SELECT ON employees TO role1;
```
- 이 명령은 `employees` 테이블에 대해 `role1`이라는 역할에게 `SELECT` 권한을 부여합니다. 이 역할에 속한 모든 사용자는 이 권한을 갖게 됩니다.
### 권한의 종류
- **`SELECT`**: 테이블에서 데이터를 조회할 수 있는 권한.
- **`INSERT`**: 테이블에 새로운 데이터를 삽입할 수 있는 권한.
- **`UPDATE`**: 테이블의 데이터를 수정할 수 있는 권한.
- **`DELETE`**: 테이블의 데이터를 삭제할 수 있는 권한.
- **`EXECUTE`**: 저장 프로시저나 함수 등의 실행 권한.
### 권한 확인 및 취소
- **권한 확인**: 특정 사용자나 역할에 부여된 권한을 확인하려면 데이터베이스의 시스템 테이블이나 뷰를 조회할 수 있습니다. 예를 들어 Oracle에서는 `DBA_TAB_PRIVS` 뷰를 사용합니다.
- **권한 취소**: 권한을 취소하려면 `REVOKE` 명령을 사용합니다.
```sql
REVOKE SELECT ON employees FROM user1;
```
- 이 명령은 `user1`에게 `employees` 테이블에 대한 `SELECT` 권한을 취소합니다.
### 요약
- `GRANT` 명령은 SQL에서 권한을 사용자나 역할에게 부여하는 데 사용됩니다.
- 권한은 데이터베이스 객체에 대한 액세스를 제어하며, `WITH GRANT OPTION`을 통해 권한 전파가 가능합니다.
- 권한 관리 및 보안을 고려하여 적절한 권한만을 부여하고, 필요에 따라 권한을 취소할 수 있습니다.
'Data Analysis 데이터 분석 > SQL 통한 Database 관리' 카테고리의 다른 글
lag() (0) | 2024.08.18 |
---|---|
with grant option (0) | 2024.08.18 |
drop schema employee cascade (0) | 2024.08.18 |
drop schema employee restrict (0) | 2024.08.18 |
percent_rank() (0) | 2024.08.18 |