ユーザーとスキーマの分離
SQL Server 2005 では、スキーマの動作が変更されました。スキーマはデータベース ユーザーと同等でなくなり、各スキーマはそれを作成したデータベース ユーザーとは独立して存在する別個の名前空間となりました。つまり、スキーマは単にオブジェクトのコンテナです。スキーマはどのユーザーでも所有でき、その所有権は譲渡可能です。
新しい動作
スキーマから所有権を切り離すことには重要な意味があります。
スキーマとスキーマ スコープのセキュリティ保護可能なリソースの所有権を譲渡できます。詳細については、「ALTER AUTHORIZATION (Transact-SQL)」を参照してください。
スキーマ間でオブジェクトを移動できます。詳細については、「ALTER SCHEMA (Transact-SQL)」を参照してください。
1 つのスキーマに複数のデータベース ユーザーが所有するオブジェクトを含めることができます。
複数のデータベース ユーザーが 1 つの既定のスキーマを共有できます。
スキーマとスキーマ内のセキュリティ保護可能なリソースの権限を、以前のリリースより厳密に管理できます。詳細については、「GRANT (スキーマ権限の許可) (Transact-SQL)」および「GRANT (オブジェクトの権限の許可) (Transact-SQL)」を参照してください。
どのデータベース プリンシパルでも、1 つのスキーマを所有できます。このデータベース プリンシパルにはロールおよびアプリケーション ロールが含まれます。
対応するスキーマ内のオブジェクトを削除しなくても、データベース ユーザーを削除できます。
以前のリリースの SQL Server 用に記述されたコードでスキーマとデータベース ユーザーを同等と見なしている場合は、そのコードが不適切な結果を返す場合があります。
以前のリリースの SQL Server 用にデザインされたカタログ ビューは、不適切な結果を返す場合があります。このようなカタログ ビューには sysobjects があります。
新しいカタログ ビュー
SQL Server 2005 以降では、スキーマがメタデータに反映される明示的なエンティティとなっています。このため、各スキーマの所有者は 1 人に限定されますが、1 人のユーザーが多数のスキーマを所有できます。この複雑なリレーションシップは SQL Server 2000 のシステム テーブルには反映されないため、SQL Server 2005 で新しいメタデータを正確に反映するカタログ ビューが新たに導入されました。
次の表に、SQL Server 2000 のシステム テーブルと、対応する SQL Server 2005 以降のカタログ ビューとのマッピングを示します。
SQL Server 2000 システム テーブル |
SQL Server 2005 以降のカタログ ビュー |
---|---|
sysusers |
sys.database_principals sys.schemas |
syslogins |
sys.server_principals |
SQL Server 2005 では、250 を超える新しいカタログ ビューが導入されました。新しいカタログ ビューを使用してメタデータにアクセスすることを強くお勧めします。詳細については、「カタログ ビュー (Transact-SQL)」を参照してください。
新しい DDL ステートメントによって、システム メタデータが複雑になり、sysobjects などの古いカタログ ビューにはこのデータが正確に反映されない可能性があります。次の例では、sysobjects から返されるユーザー ID とスキーマ名が同期されておらず、SQL Server 2005 で導入されたユーザーとスキーマの区別が反映されていません。
use tempdb
go
create login u1 with password = 'Mdfjd$sakj943857l7sdfh##30'
create user u1 with default_schema = u1
go
grant create table to u1
go
create schema sch1
go
create schema u1 authorization u1
go
execute as user = 'u1'
go
create table t1(c1 int)
go
revert
go
select user_name(uid) , * from sysobjects where name = 't1'
go
注意 |
---|
次のいずれかの DDL ステートメントが使用されたデータベースでは、新しいカタログ ビューを使用する必要があります。CREATE/ALTER/DROP SCHEMA、CREATE/ALTER/DROP USER、CREATE/ALTER/DROP ROLE、CREATE/ALTER/DROP APPROLE、ALTER AUTHORIZATION。 |
既定のスキーマ
セキュリティ保護可能なリソースの名前が完全修飾されていない場合、その名前を解決するために、SQL Server 2000 では名前解決を使用して呼び出し側のデータベース ユーザーが所有するスキーマと dbo が所有するスキーマが照合されます。
SQL Server 2005 以降は、ユーザーごとに既定のスキーマが使用されるようになりました。既定のスキーマは、CREATE USER や ALTER USER の DEFAULT_SCHEMA オプションを使用して、設定および変更できます。DEFAULT_SCHEMA が定義されていない場合、データベース ユーザーには既定のスキーマとして dbo が使用されます。