Data Analysis 데이터 분석/SQL 통한 Database 관리

grant()

Queen Julia 2024. 8. 18. 16:58

`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