Kami menambahkan login server dan pengguna database yang memetakan Windows Group ke contoh SQL 2008 R2 menggunakan skrip berikut, dengan nama yang diubah untuk anonimitas:
USE master
go
CREATE LOGIN [DOMAIN\AppUsers] FROM WINDOWS
WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
go
USE AppDb
go
CREATE USER [DOMAIN\AppUsers] FOR LOGIN
[DOMAIN\AppUsers]
go
EXEC sp_addrolemember N'db_owner', N'DOMAIN\AppUsers'
go
Ketika akun DOMAIN \ User1 masuk ke aplikasi, User1 menanyakan tabel dalam skema dbo karena User1 adalah anggota dari DOMAIN \ AppUsers, tetapi aplikasi ini memungkinkan pengguna untuk membuat tabel juga. Saat membuat tabel ini tanpa menentukan skema , SQL Server melakukan hal berikut:
- Membuat pengguna 'DOMAIN \ User1' di AppDb yang menggunakan info masuk 'DOMAIN \ User1' yang tidak tercantum dalam SSMS \ Security \ Login sebagai contoh.
- Membuat skema 'DOMAIN \ User1' di AppDb.
- Membuat tabel tersebut menggunakan skema 'DOMAIN \ User1' yang baru.
Saya benar-benar bingung dengan hasil ini. Ini pertanyaan saya:
- Saya berharap pembuatan tabel gagal daripada membuat objek tambahan. Dapatkah seseorang mengarahkan saya ke bagian Buku Online yang menjelaskan hal ini?
- Mengapa server tidak membuat skema 'DOMAIN \ AppUsers' dan menambahkan tabel baru ke skema itu jika ingin menambah skema?
- Juga, bagaimana database menggunakan login yang tidak ditampilkan di SSMS \ Security \ Login?
- Melihat pengguna 'DOMAIN \ User1' di SSMS \ Databases \ AppDb \ Security \ Users, ikon pengguna memiliki panah merah kecil yang mengarah ke bawah. Apa artinya?
Kami baru mulai menggunakan Otentikasi Windows di dalam organisasi yang lebih memilih Otentikasi SQL untuk kesederhanaan, jadi saya yakin pertanyaan saya berasal dari tidak mengetahui perbedaan. Kode ini ditulis jauh sebelum kami mempertimbangkan untuk menggunakan Otentikasi Windows, jadi saya yakin kami perlu meningkatkan pemahaman kami tentang membuat skema baru ketika masuk menggunakan Otentikasi Windows sebagai orang lain selain pemilik basis data.
Jika Anda tidak tahu, saya yang mendorong untuk menggunakan Windows Authentication melalui SQL Authentication. Jika kami tidak memahami ini dengan benar, kami akan kembali ke SQL Authentication.
sumber
Jawaban:
Ini selalu terjadi, kembali ke SQL Server 2000.
Tanpa skema, bagaimana SQL Server tahu Anda ingin memasukkannya ke dalam
dbo
skema?Satu-satunya cara untuk menentukan skema default adalah dengan:
Tak satu pun dari ini dapat diterima
Praktik terbaik adalah untuk selalu memenuhi syarat skema untuk setiap referensi objek untuk DDL dan DML. Ada manfaat kinerja yang jelas karena rencana digunakan kembali.
Juga, penggunaan skema yang disengaja lebih baik untuk SQL Server 2005:
Data
Archive
,Staging
dllDesktop
,WebGUI
dllMenggunakan skema dbo adalah begitu milenium terakhir :-) Links:
sumber
Yah @gbn mengetik lebih cepat dari yang saya lakukan ...
Saya hanya menawarkan adalah ... Anda referensi pengguna login ke app dan itu memungkinkan pengguna untuk membuat tabel dan semacamnya. Jika aplikasi mengizinkan ini dan pengguna tidak melakukan ini melalui SQL Server itu sendiri (masuk langsung ke database menggunakan SSMS) maka Anda perlu memeriksa dengan vendor aplikasi itu.
sumber
Meskipun pertanyaannya sudah sangat lama dan sudah memiliki jawaban yang dapat diterima, saya akan mencoba menjawab pertanyaan Anda secara lebih spesifik (daripada memberikan saran umum).
Perilaku ini didokumentasikan dalam https://docs.microsoft.com/en-us/sql/t-sql/statements/create-schema-transact-sql , di bagian "Skema Tersirat dan Penciptaan Pengguna"
Jika Anda ingin objek dibuat dalam skema tertentu (ketika skema tidak ditentukan secara eksplisit dalam pernyataan), Anda harus menentukan DEFAULT_SCHEMA untuk pengguna. Dalam SQL Server 2008 R2 (dan versi sebelumnya), Anda akan mendapatkan kesalahan jika Anda mencoba untuk menetapkan DEFAULT_SCHEMA ke pengguna yang didasarkan pada grup Windows, tetapi dalam SQL Server 2012 (dan versi yang lebih baru) ini sekarang mungkin.
Itu tidak ditampilkan hanya karena tidak ada login untuk pengguna itu. Sebagaimana ditentukan dalam https://docs.microsoft.com/en-us/sql/t-sql/statements/create-user-transact-sql , pengguna dapat dibuat untuk seseorang yang log in menggunakan grup yang berbeda atau bahkan tanpa login apa pun.
Panah merah kecil (atau merah kecil x dalam versi SSMS yang lebih baru) mewakili pengguna yang tidak memiliki izin CONNECT dalam database (namun, izin ini dapat diperoleh melalui grup lain).
sumber
Sementara ini adalah pertanyaan lama saya telah mengamati perilaku ini (Dalam SQL Server 2014) dan menemukan yang berikut ini:
Diberikan skrip
Script ini akan membuat dua tabel yang disebut Test.
Yang pertama
CREATE TABLE
membuat tabel yang disebut[MyDomain\MyAdGroupUser].[Test]
dan juga menciptakanMyDomain\MyAdGroupUser
skema (sertaMyDomain\MyAdGroupUser
pengguna basis data yang dinonaktifkan)yang kedua
CREATE TABLE
membuat tabel bernama[dbo].[Test]
Alasan untuk ini adalah karena
CREATE TABLE
perintah tidak menjelaskan keadaan skema, mereka akan menggunakan skema default.Karena kami tidak menentukan skema default saat membuat pengguna, SQL Server menetapkan skema default pengguna Windows sebagai dbo tetapi TIDAK mengatur skema default APA PUN untuk pengguna Windows Group dan karenanya hal ini menyebabkan skema / pembuatan pengguna
sumber