Saya memiliki prosedur tersimpan yang:
- memeriksa apakah ada tabel dan jika demikian, letakkan saja.
- membuat tabel itu lagi
- kemudian mengisi tabel itu dengan sekitar 30 pertanyaan.
Ketika saya (Pemilik DB) menjalankan proc ini, semuanya berfungsi sebagaimana dimaksud. Ketika rekan kerja saya melakukannya, siapa yang memiliki hak DROP / BUAT pada database ini melalui peran dalam Active Directory, beberapa hal salah. Yang mengejutkan pikiran saya adalah ini:
Pembuatan tabel tidak memiliki dbo
skema yang ditentukan secara eksplisit sebelum nama. Ini menghasilkan tabel yang disebut domain\cowork_id.table_name_here
tabel yang akan dibuat. Selain tabel yang dibuat dalam skema pribadinya, dia sekarang juga memiliki skema itu di database (tidak ada sebelum menjalankan proc).
Apa yang terjadi? Mengapa SQL Server membuat tabel dalam skema pengguna alih-alih dbo
ketika tidak ditentukan?
sql-server
sql-server-2016
steenbergh
sumber
sumber
Jawaban:
Sebagai aturan, Anda harus menentukan skema secara eksplisit
dbo
jika Anda ingin membuat objek dalam skema ini.Seperti Anda
db_owner
, skema default Anda adalahdbo
, jadi tidak ada masalah ketika Anda tidak menentukan skema dbo saat membuat objek. Tetapi untuk pengguna (Windows) lainnya tidak sama.Pengguna Anda adalah anggota
Windows group
yang tidak memiliki skema default. Dalam hal ini pengguna yang sesuai dan skema dibuat ketika pengguna membuat objek apa pun, itu didokumentasikan di sini: CREATE SCHEMA (Transact-SQL)Untuk mengatasi masalah ini, tetapkan
dbo
skemadefault schema
untuk semua grup pengguna-Windows atau tulis skema secara eksplisit saat membuat objek. Selalu.sumber