SQL Server 사용자 정보

이 페이지에서는 Cloud SQL에서 SQL Server 사용자 및 역할이 사용되는 방법을 보여줍니다. SQL Server 역할을 사용하면 SQL Server 인스턴스에 액세스하는 사용자의 액세스 권한 및 기능을 제어할 수 있습니다.

Cloud SQL 사용자 만들기 및 관리에 관한 자세한 내용은 사용자 만들기 및 관리를 참조하세요.

SQL Server 역할 및 사용자

SQL Server 역할은 단일 역할일 수 있으며 하나의 역할 그룹으로 작동할 수 있습니다.

사용자는 로그인 기능이 있는 역할입니다(역할에 LOGIN 권한이 포함됨). Cloud SQL에서 생성되는 모든 역할에 LOGIN 권한이 포함되므로, Cloud SQL에서 '역할' 및 '사용자'라는 용어는 서로 동일한 의미로 사용됩니다. 하지만 SQL Server와 호환되는 클라이언트 도구에 역할을 만들 경우 이 역할에 반드시 LOGIN 권한이 부여되지는 않습니다.

SQL 서버용 Cloud SQL은 고급 권한을 제공하는 특정 서버 역할에 대한 액세스를 제한합니다. 이러한 역할의 예로는 DbRootRole, serveradmin, securityadmin, setupadmin, diskadmin, dbcreator가 있습니다.

모든 SQL Server 사용자는 비밀번호가 있어야 합니다. 따라서 비밀번호가 없는 사용자로 로그인할 수 없습니다.

수퍼유저 및 시스템 저장 프로시저

SQL Server용 Cloud SQL은 관리형 서비스이므로 고급 권한이 필요한 특정 시스템 저장 프로시져 및 테이블에 대한 액세스를 제한합니다. Cloud SQL에서는 수퍼유저 권한이 있는 사용자를 만들거나 해당 사용자로 액세스할 수 없습니다.

기본 SQL Server 사용자

SQL Server용 Cloud SQL 인스턴스를 새로 만들면 기본 sqlserver 사용자가 자동으로 생성되며, 사용자 비밀번호를 설정해야 합니다.

sqlserver 사용자는 CustomerDbRootRole 역할의 일부이며, 해당 권한에 다음이 포함됩니다.

  • ALTER ANY CONNECTION
  • ALTER ANY LOGIN
  • ALTER ANY SERVER ROLE
  • ALTER SERVER STATE
  • ALTER TRACE
  • CONNECT SQL
  • CREATE ANY DATABASE
  • CREATE SERVER ROLE
  • VIEW ANY DATABASE
  • VIEW ANY DEFINITION
  • VIEW SERVER STATE

연결된 서버와 함께 사용하려면 cloudsql enable linked servers를 인스턴스에 추가할 수도 있습니다. 이 플래그는 서버에 다음 권한을 부여합니다.

  • ALTER ANY LINKED SERVER

서버 권한 부여

GRANT 명령어를 사용하여 권한을 부여할 때는 CustomerDbRootRolegrantor_principal 값 등으로 전달해야 합니다.

다음 GRANT ALTER ANY LOGIN 예시는 유효합니다.

GRANT ALTER ANY LOGIN TO [Account] AS CustomerDbRootRole

다음 GRANT ALTER ANY LOGIN 예시는 유효하지 않습니다.

GRANT ALTER ANY LOGIN TO [Account]

다른 SQL Server 사용자

다른 SQL Server 사용자 또는 역할을 만들 수 있습니다. Cloud SQL을 사용하여 만드는 모든 사용자에게는 sqlserver 로그인과 동일한 데이터베이스 권한이 부여됩니다. 그러나 Cloud SQL을 사용하여 만드는 대신 다른 프로세스를 사용해서 사용자를 만들려는 경우 고객 관리자 계정 또는 sqlserver 사용자와 동일한 권한이 사용자에게 부여되지 않습니다. 예를 들어 로그인 만들기 프로세스를 사용하고 로그인을 CustomerDbRootRole 서버 역할에 추가하면 고객 관리자 계정 또는 sqlserver 사용자와 동일한 권한이 사용자에게 부여되지 않습니다. 따라서 sqlserver 로그인과 동일한 데이터베이스 권한을 사용자에게 부여하려면 Cloud SQL을 사용하여 사용자를 만들면 됩니다. 두 계정 사이의 권한 차이를 확인하려면 sys.fn_my_permissions 함수를 사용하면 됩니다.

데이터베이스 가져오기: 소유자 권한

데이터베이스를 가져올 때 소유자 처리는 소유자 유형에 따라 다음과 같이 확인됩니다.

  • sa가 아닌 기존 로그인의 경우: Cloud SQL이 해당 소유자를 유지하고 sqlserver 로그인에 매핑되는 sqlserver라는 사용자를 만듭니다. Cloud SQL은 이 sqlserver 사용자에게 CONTROLALTER ANY USER 권한을 부여합니다.
  • 알 수 없는 로그인 또는 이전에 시스템에서 생성된 로그인의 경우: Cloud SQL이 데이터베이스 소유권을 sqlserver 로그인으로 전달합니다.

사용자의 권한 변경

ALTER ROLE 명령어는 사용자 권한을 변경할 수 있습니다. 클라이언트에 새 사용자를 만들려면 다른 역할과 연결하거나 다른 권한을 제공할 수 있습니다.

문제 해결

데이터베이스 액세스 오류

만든 사용자로 생성한 데이터베이스에 액세스하려고 하면 다음과 같은 오류가 발생합니다.

The server principal USERNAME is not able to access the
database DATABASE_NAME under the current security context.

문제 원인

사용자가 데이터베이스의 구성원이 아닙니다.

해결 방법

데이터베이스에 sqlserver 사용자로 연결하고 새 사용자를 추가한 다음 데이터베이스의 db_owner 역할을 새 사용자에게 부여합니다. 예를 들면 다음과 같습니다.

EXEC sp_adduser 'user';
EXEC sp_addrolemember 'db_owner', 'user'

다음 단계