sql >> Databáze >  >> RDS >> Sqlserver

Mohu nastavit výchozí schéma pro v rámci uložené procedury?

Na různých místech jsou kousky, jak to udělat, ale ne úplně. Způsob, jak to udělat, je:

  1. Vytvořte jedinečné přihlášení a uživatele pro každé schéma

  2. Udělejte z těchto uživatelů vlastníky každého jiného schématu.

  3. Nastavte výchozí schéma každého takového uživatele na schéma, které vlastní.

  4. Použijte syntaxi EXECUTE ('sql commands') AS USER = 'schema-owner' spouštět vaše příkazy SQL v kontextu tohoto výchozího schématu.

Následující skript to ukazuje:

--====== Create the Login for the User:
CREATE LOGIN [UserTest1] WITH PASSWORD='whatever', DEFAULT_DATABASE=[TestUsers], DEFAULT_LANGUAGE=[us_english]
GO

--====== Make a User for the Login:
CREATE USER [UserTest1] FOR LOGIN [UserTest1]
GO

--====== Make a Schema owned by the User and default to it:
--        (I assume that you already have the schemas)
CREATE SCHEMA [UserTest1] AUTHORIZATION [UserTest1]
GO
ALTER USER [UserTest1] WITH DEFAULT_SCHEMA=[UserTest1]
GO

--====== Make a sProc in dbo
CREATE PROCEDURE [dbo].[TestSchema_Exec] AS
    SELECT 'executing in schema [dbo]'
GO
--====== Make a similar sProc in New Schema
CREATE PROCEDURE [UserTest1].[TestSchema_Exec] AS
    SELECT 'executing in schema [UserTest1]'
GO

--========= Demonstrate that we can switch Default Schemas:
EXEC('TestSchema_Exec')

EXEC('TestSchema_Exec') AS USER = 'UserTest1'


  1. Jak přidám vlastní omezení CHECK do tabulky MySQL?

  2. Postgres analogie k CROSS APPLY na SQL Server

  3. Rails Console vyhledá uživatele podle řady ID

  4. Jak co nejtransparentněji migrovat existující tabulku Postgres na rozdělenou tabulku?