Tentang pengguna SQL Server

Halaman ini menjelaskan bagaimana Cloud SQL bekerja dengan pengguna dan peran SQL Server. Peran SQL Server memberi Anda kontrol atas akses dan kemampuan pengguna yang yang mengakses instance SQL Server.

Untuk informasi mengenai cara membuat dan mengelola pengguna Cloud SQL, lihat Membuat dan mengelola pengguna.

Peran dan pengguna SQL Server

Peran SQL Server dapat berupa peran tunggal, atau dapat berfungsi sebagai sekelompok peran.

Pengguna adalah peran yang memiliki kemampuan untuk login (peran tersebut memiliki izin LOGIN). Semua peran yang dibuat oleh Cloud SQL memiliki izin LOGIN, sehingga Cloud SQL menggunakan istilah "peran" dan "pengguna" secara bergantian. Namun, jika Anda membuat peran dengan klien, peran tersebut tidak selalu memiliki izin LOGIN.

Semua pengguna SQL Server harus memiliki kata sandi. Oleh karena itu, Anda tidak dapat login dengan pengguna yang tidak memiliki kata sandi.

Superuser dan prosedur yang tersimpan dalam sistem

Cloud SQL untuk SQL Server adalah layanan terkelola, oleh karena itu layanan ini membatasi akses ke prosedur dan tabel tersimpan dalam sistem tertentu yang memerlukan hak istimewa lanjutan. Di Cloud SQL, Anda tidak dapat membuat atau memiliki akses ke pengguna dengan izin superuser.

Pengguna SQL Server default

Saat Anda membuat Cloud SQL baru untuk instance SQL Server pengguna sqlserver default sudah dibuat untuk Anda, meskipun Anda harus menetapkan sandinya.

Pengguna sqlserver adalah bagian dari peran CustomerDbRootRole, dan izin (hak istimewanya) mencakup hal-hal berikut:

  • 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

Anda juga dapat menambahkan cloudsql enable linked servers ke instance jika ingin menggunakannya dengan server tertaut. Flag ini memberikan izin berikut ke server Anda:

  • ALTER ANY LINKED SERVER

Memberikan izin server

Saat memberikan hak istimewa menggunakan perintah GRANT apa pun, Anda harus meneruskannya dengan as CustomerDbRootRole, misalnya, nilai grantor_principal.

Contoh GRANT ALTER ANY LOGIN berikut ini valid:

GRANT ALTER ANY LOGIN TO [Account] AS CustomerDbRootRole

Contoh GRANT ALTER ANY LOGIN berikut ini tidak valid .

GRANT ALTER ANY LOGIN TO [Account]

Pengguna SQL Server lainnya

Anda dapat membuat pengguna atau peran SQL Server lainnya. Semua pengguna yang Anda buat menggunakan Cloud SQL diberi izin database yang sama dengan login sqlserver. Namun, jika Anda menggunakan proses yang berbeda untuk membuat pengguna (tidak membuatnya menggunakan Cloud SQL), pengguna tidak akan memiliki izin yang sama dengan akun administrator pelanggan atau pengguna sqlserver. Sebagai contoh, jika Anda menggunakan proses create login, dan menambahkan login ke peran server CustomerDbRootRole, pengguna tidak akan tidak akan memiliki izin yang sama seperti akun administrator pelanggan atau pengguna sqlserver. Oleh karena itu, Anda dapat menggunakan Cloud SQL untuk membuat pengguna jika Anda ingin pengguna tersebut memiliki izin database yang sama dengan login sqlserver. Untuk memvalidasi perbedaan izin antara dua akun, Anda dapat menggunakan fungsi berikut: sys.fn_my_permissions.

Mengimpor database: izin pemilik

Saat Anda mengimpor database, perlakuan pemilik bervariasi berdasarkan jenis pemiliknya:

  • Untuk login yang sudah ada yang bukan sa: Cloud SQL akan menyimpan pemilik tersebut dan membuat pengguna bernama sqlserver yang memetakan ke login sqlserver. Cloud SQL memberikan izin CONTROL dan ALTER ANY USER kepada pengguna sqlserver tersebut.
  • Untuk login yang tidak dikenal atau login yang dibuat oleh sistem: Cloud SQL mentransfer kepemilikan database ke login sqlserver.

Mengubah izin untuk pengguna

Perintah ALTER ROLE tersedia untuk mengubah izin pengguna. Jika membuat pengguna baru dengan klien, Anda dapat mengaitkannya dengan peran yang berbeda atau memberikan izin yang berbeda.

Pemecahan masalah

Terjadi error saat mengakses database

Saat mencoba mengakses database yang Anda buat, sebagai pengguna yang Anda buat, Anda akan mendapatkan error berikut:

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

Masalahnya mungkin adalah

Pengguna bukanlah anggota dari database.

Hal-hal yang sebaiknya dicoba

Hubungkan ke database sebagai pengguna sqlserver dan tambahkan pengguna baru, lalu beri pengguna baru peran db_owner untuk database. Misalnya:

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

Langkah selanjutnya