Skapa befintliga konto för en återskapad databas
Innehåll
»»
»
Skapa nya Login till databaser som har flyttats till en annan SQL Server
av Diana Dee
I våran planering till att uppgradera vår produktionsserver från SQL Server 7.0 till SQL Server 2000, så beslöt vi att vi först skulle partionera om hårddiskarna, installera om Windows 2000 Advanced Server och sedan installera SQL Server 2000. För att kunna hantera webbtrafiken med minimala avbrott, så planerade som så att vi skulle köra en backup på alla tio produktionsdatabaser för att sedan lagra dem på en temporär ersättningsserver, vilken skulle köra SQL Server 2000.
Alla dessa databaser har många användare. Användarna är mappade till sina SQL Server logins genom ett säkerhets-identifikationsnummer (SID). När man lagrar en databas på en annan SQL Server, så har inte den nya servern de login som databasanvändarna är mappade till. Eller om man har skapat nya login på den nya servern, så stämmer inte de SID på de nyskapade loginen ihop med de SID som är kopplade till användaren. Användarna ligger fortfarande kvar i sysusers tabellen, men de syns inte i Enterprise Manager. Den här situationen kallas ”Orphaned Users” (Övergivna användare).
En lösning till det här problemet är att använda sig av den lagrade proceduren sp_change_users_login och är sammanfattad i Knowledge Base artikel Q274188. Hur som helst så måste den här lösningen tillämpas databas för databas.
Tillvägagångssätt
- Alla login med dess krypterade lösenord, standarddatabaserna samt alla SIDs ska kopieras till en tabell i Northwind databasen (den här databasen valdes eftersom den redan finns då du installerat SQL Server). Proceduren, Create.LoginsTabel.sql, som utför det här, visas längre ner.
- Nästa steg är att DTSa Logintabellerna från
Create.LoginsTable.sql
-- Skapar tabellens Login i Northwind
-- innehållande alla SQL Login på Servern
-- (förutom 'sa', 'guest', och 'distributor_admin')
USE Northwind
GO
-- Skapar tabellens Login i Nortwind
CREATE TABLE [dbo].[Logins] (
[Name] [varchar] (30) NULL ,
[EncryptedPassword] [nvarchar] (128) NULL ,
[DefaultDB] [nvarchar] (128) NULL ,
[DefLanguage] [nvarchar] (128) NULL ,
[sid] [varbinary] (85) NULL ,
[EncryptOpt] [varchar] (30) NULL ,
[LoginName] [varchar] (50) NULL
) ON [PRIMARY]
GO
-- Lägger in informationen om alla Login i tabellens Login.
INSERT logins
SELECT name, [password], dbname, language, sid,
'skip_encryption', loginname
FROM master..syslogins
ORDER BY name
GO
-- Raderar speciella SQL Login och alla Windows Login.
dDELETE logins
WHERE loginname IN ('distributor_admin', 'guest', 'sa')
OR loginname LIKE '%\%'
GO
-- För att se resultaten.
SELECT name, defaultdb FROM logins
Create.logins.sql
-- Skapar källserverns Login på målservern
USE Master
Go
DECLARE logincur CURSOR
FAST_FORWARD
FOR
SELECT [name], encryptedpassword, defaultdb,
deflanguage, sid, encryptopt
FROM Northwind..logins
DECLARE @loginame varchar(30),
@passwd nvarchar(128),
@defdb nvarchar(128),
@deflang nvarchar(128),
@sid varbinary(85),
@encryptopt varchar(30)
OPEN logincur
FETCH NEXT FROM logincur
INTO @loginame, @passwd, @defdb,
@deflang, @sid, @encryptopt
WHILE (@@fetch_status = 0)
BEGIN
EXEC master..sp_addlogin
@loginame, @passwd, @defdb,
@deflang, @sid, @encryptopt
FETCH NEXT FROM logincur
INTO @loginame, @passwd, @defdb,
@deflang, @sid, @encryptopt
END
CLOSE logincur
DEALLOCATE logincur
GO
0 Kommentarer