Saya mencoba mengakses database server hosting saya melalui SQL Server Management Studio, semuanya sampai login baik-baik saja tetapi ketika saya menggunakan perintah use myDatabase
itu memberi saya kesalahan ini:
The server principal "****" is not able to access the database "****" under the current security context.
Aku mencari lebih dan penyedia layanan hosting telah terdaftar ini untuk memperbaiki masalah.
Tetapi ini tidak berfungsi untuk saya mungkin karena ini untuk SQL Server Management Studio 2008 namun saya menggunakan SQL Server Management Studio 2012.
Bisakah ini menjadi masalah? Dan jika ya daripada siapa pun dapat memberi tahu saya alternatifnya di SSMS 2012?
sql-server
sql-server-2012
Maven
sumber
sumber
Jawaban:
Periksa untuk melihat apakah pengguna Anda dipetakan ke DB yang Anda coba masuki.
sumber
Kami mengalami kesalahan yang sama saat menerapkan laporan ke SSRS di lingkungan PROD kami. Ditemukan bahwa masalah bahkan dapat direproduksi dengan pernyataan "gunakan". Solusinya adalah menyinkronkan ulang referensi akun GUID pengguna dengan database yang dimaksud (yaitu, menggunakan "sp_change_users_login" seperti yang Anda lakukan setelah memulihkan db). Sebuah skrip saham (digerakkan oleh kursor) untuk menyinkronkan ulang semua akun dilampirkan:
sumber
Saya menghabiskan cukup banyak waktu untuk bergulat dengan masalah ini dan kemudian saya menyadari bahwa saya membuat kesalahan sederhana dengan fakta bahwa saya lupa database mana yang saya targetkan untuk koneksi saya. Saya menggunakan jendela koneksi SQL Server standar untuk memasukkan kredensial:
Saya harus memeriksa tab Connection Properties untuk memverifikasi bahwa saya memilih database yang benar untuk disambungkan. Saya secara tidak sengaja membiarkan opsi Hubungkan ke database di sini diatur ke pilihan dari sesi sebelumnya. Inilah mengapa saya tidak dapat terhubung ke database yang saya pikir saya coba sambungkan.
Perhatikan bahwa Anda perlu mengklik
Options >>
tombol agar Connection Properties dan tab lain muncul.sumber
Ini berhasil untuk saya:
Masalahnya dapat divisualisasikan dengan:
sumber
SQL Login didefinisikan di tingkat server, dan harus dipetakan ke Pengguna dalam database tertentu.
Di penjelajah objek SSMS, di bawah server yang ingin Anda ubah, luaskan Keamanan > Masuk , lalu klik dua kali pengguna yang sesuai yang akan memunculkan dialog "Properti Masuk".
Pilih Pemetaan Pengguna , yang akan menampilkan semua database di server, dengan yang telah dipilih pemetaannya. Dari sini Anda dapat memilih database tambahan (dan pastikan untuk memilih peran mana di setiap database yang harus dimiliki pengguna), lalu klik OK untuk menambahkan pemetaan.
Pemetaan ini dapat terputus setelah pemulihan atau operasi serupa. Dalam kasus ini, pengguna mungkin masih ada di database tetapi sebenarnya tidak dipetakan ke login. Jika itu terjadi, Anda dapat menjalankan perintah berikut untuk memulihkan login:
Anda juga dapat menghapus pengguna DB dan membuatnya kembali dari dialog Properti Login, tetapi semua peran keanggotaan atau pengaturan lain perlu dibuat ulang.
sumber
Dalam kasus saya, pesan tersebut disebabkan oleh sinonim yang secara tidak sengaja memasukkan nama database di "nama objek". Ketika saya memulihkan database dengan nama baru, sinonimnya masih menunjuk ke nama DB lama. Karena pengguna tidak memiliki izin di DB lama, pesan tersebut muncul. Untuk memperbaikinya, saya menjatuhkan dan membuat ulang sinonim tanpa mengkualifikasi nama objek dengan nama database:
sumber
Kami mengalami kesalahan yang sama meskipun pengguna telah dipetakan dengan benar ke proses masuk.
Setelah mencoba untuk menghapus pengguna, ditemukan bahwa beberapa SP berisi "dengan mengeksekusi sebagai" pengguna itu.
Masalah ini diselesaikan dengan menghapus SP tersebut, menjatuhkan pengguna, membuat ulang pengguna yang ditautkan untuk masuk, dan membuat ulang SP.
Mungkin itu dalam keadaan ini dari memulihkan dari cadangan (selama waktu ketika login terkait tidak ada) atau sinkronisasi skema massal (jika memungkinkan untuk membuat SP dengan mengeksekusi seolah-olah pengguna tidak ada. Bisa juga memiliki terkait dengan jawaban ini .
sumber
Saya mengalami kesalahan yang sama saat menggunakan Server Management Objects (SMO) di vb.net (Saya yakin itu sama di C #)
Komentar Techie Joe pada posting awal adalah peringatan yang berguna bahwa dalam shared hosting banyak hal tambahan yang terjadi. Butuh sedikit waktu untuk mengetahuinya, tetapi kode di bawah ini menunjukkan bagaimana seseorang harus sangat spesifik dalam cara mereka mengakses database SQL. Kesalahan 'server principal ...' tampaknya muncul setiap kali panggilan SMO tidak spesifik secara spesifik di lingkungan shared hosting.
Bagian pertama kode ini melawan server SQL Express lokal dan mengandalkan Autentikasi Windows sederhana. Semua kode yang digunakan dalam sampel ini didasarkan pada tutorial SMO oleh Robert Kanasz dalam artikel situs web Proyek Kode ini :
Kode di atas menemukan file .mdf untuk setiap database di server SQLEXPRESS lokal dengan baik karena otentikasi ditangani oleh Windows dan itu luas di semua database.
Dalam kode berikut, ada 2 bagian yang melakukan iterasi untuk file .mdf. Dalam kasus ini, hanya iterasi pertama yang mencari filegroup yang berfungsi, dan hanya menemukan satu file karena koneksi hanya ke satu database di lingkungan hosting bersama.
Iterasi kedua, yang merupakan salinan dari iterasi yang bekerja di atas, langsung tersedak karena cara penulisannya mencoba mengakses database pertama di lingkungan bersama, yang bukan database yang diterapkan oleh User ID / Password, jadi server SQL mengembalikan kesalahan otorisasi dalam bentuk kesalahan 'server principal ...'.
Dalam perulangan iterasi kedua, kode dikompilasi dengan baik, tetapi karena SMO tidak diatur untuk mengakses database yang benar dengan sintaks yang tepat, upaya itu gagal.
Karena saya baru belajar SMO, saya pikir pemula lain mungkin menghargai mengetahui ada juga penjelasan yang lebih sederhana untuk kesalahan ini - kami hanya salah mengkodekannya.
sumber
Saya yakin Anda mungkin kehilangan pernyataan "Grant Connect To" saat Anda membuat pengguna database.
Di bawah ini adalah cuplikan lengkap yang Anda perlukan untuk membuat login pada SQL Server DBMS serta pengguna terhadap database
sumber