Theo quy tắc, bạn nên chỉ định rõ ràngdbo
lược đồ nếu bạn muốn tạo đối tượng trong lược đồ này.
Như bạn là db_owner
, lược đồ mặc định của bạn là dbo
, vì vậy không có vấn đề gì khi bạn không chỉ định lược đồ dbo trong khi tạo đối tượng. Nhưng đối với người dùng (Windows) khác thì không giống nhau.
Người dùng của bạn là thành viên Windows group
không có lược đồ mặc định. Trong trường hợp này, người dùng và lược đồ tương ứng được tạo khi người dùng tạo bất kỳ đối tượng nào, nó được ghi lại ở đây: CREATE SCHema (Transact-SQL)
Lược đồ tiềm ẩn và tạo người dùng
Trong một số trường hợp, người dùng có thể sử dụng cơ sở dữ liệu mà không cần có tài khoản người dùng cơ sở dữ liệu (cơ sở dữ liệu chính trong cơ sở dữ liệu). Điều này có thể xảy ra trong các tình huống sau:
Một đăng nhập có đặc quyền ĐIỀU KHIỂN SERVER.
Người dùng Windows không có tài khoản người dùng cơ sở dữ liệu cá nhân (cơ sở dữ liệu chính trong cơ sở dữ liệu), nhưng truy cập cơ sở dữ liệu với tư cách là thành viên của nhóm Windows có tài khoản người dùng cơ sở dữ liệu (hiệu trưởng cơ sở dữ liệu cho nhóm Windows).
Khi người dùng không có tài khoản người dùng cơ sở dữ liệu tạo một đối tượng mà không chỉ định một lược đồ hiện có, một lược đồ chính và cơ sở dữ liệu mặc định sẽ được tạo tự động trong cơ sở dữ liệu cho người dùng đó. Lược đồ và sơ đồ cơ sở dữ liệu đã tạo sẽ có cùng tên với tên mà người dùng đã sử dụng khi kết nối với SQL Server (tên đăng nhập xác thực SQL Server hoặc tên người dùng Windows).
Hành vi này là cần thiết để cho phép người dùng dựa trên các nhóm Windows tạo và sở hữu các đối tượng. Tuy nhiên, nó có thể dẫn đến việc tạo ra các lược đồ và người dùng không chủ ý. Để tránh ngầm định tạo người dùng và lược đồ, bất cứ khi nào có thể rõ ràng sẽ tạo các hiệu trưởng cơ sở dữ liệu và gán một lược đồ mặc định. Hoặc nêu rõ một lược đồ hiện có khi tạo các đối tượng trong cơ sở dữ liệu, sử dụng tên đối tượng hai hoặc ba phần.
Để giải quyết vấn đề, chỉ cần gán dbo
lược đồ default schema
cho tất cả các nhóm người dùng-Windows hoặc viết lược đồ rõ ràng khi tạo đối tượng. Luôn luôn.