Selamlar...
Microsoft Dynamics NAV ERP uygulamasının kullandığı veritabanının bir yedeğini de farklı bir sunucuya yükleyerek, bir test sunucusu oluşturabiliriz.
Yedek dosyasını sunucuya yükleme işleminde özel bir durum yok, ancak bu yükleme işleminden sonra Navision uygulamasından veritabanına bağlanamıyoruz.
Çünkü kullanıcıların oluşturulması gerekiyor.
İşte bu ihtiyaç için, gerçek ortamdaki veritabanı sunucusundan kullanıcı bilgilerini alıp test sunucusuna oluşturan bir script yazdım.
Test sunucunuza gerçek ortam ortam sunucunuzu "Linked Server" olarak eklemek gerekiyor öncelikle.
Sonra da bu scripti çalıştırdığınızda, root seviyedeki kullanıcıları varsa silip tekrar oluşturuyor ve NAVISION veritabanına database_owner olarak rol tanımlıyor.
DECLARE @strSql NVARCHAR(MAX);
DECLARE @kullaniciAdi SYSNAME;
DECLARE @kullaniciSifre NVARCHAR(MAX);
DECLARE @kullaniciCursor CURSOR;
 
SET @strSql = '';
SET @kullaniciCursor = CURSOR FAST_FORWARD 
    FOR
        -- Gercek ortamdaki sunucuyu [Server Objects -> Linked Servers] altina ekledik. Oradan guncel kullanici bilgisini aliyoruz.
        SELECT SP.name, CONVERT(NVARCHAR(MAX), SL.password_hash, 1) 
            FROM [GercekNavisionSunucusu].master.sys.server_principals AS SP
                LEFT OUTER JOIN [GercekNavisionSunucusu].master.sys.sql_logins AS SL ON SP.principal_id = SL.principal_id
        WHERE SP.type_desc = 'SQL_LOGIN'
            AND SP.name NOT LIKE '##%##'
            AND SP.name IN ('Kullanici1', 'Kullanici2', 'Kullanici3', 'Kullanici4'); -- Sadece belirli kullanicilari olusturalim.
 
    -- Buldugumuz kullanicilar icinde dolasiyoruz.
    OPEN @kullaniciCursor 
    FETCH NEXT FROM @kullaniciCursor INTO @kullaniciAdi, @kullaniciSifre
 
    WHILE @@FETCH_STATUS = 0 
      BEGIN
        SELECT @strSql =  @strSql + 
            -- Bazi kullanicilara ait semalar var(kullanici adiyla ayni), bu durumda kullaniciyi silemiyor. Once onlarin dbo yapalim.
            ' IF EXISTS (SELECT name FROM sys.schemas WHERE name = N''' + @kullaniciAdi + ''') ' +
            ' BEGIN ALTER AUTHORIZATION ON SCHEMA::' + @kullaniciAdi + ' TO dbo END; ' +
 
            -- Sonra eger varsa, ana seviyedeki kullanicilari silip tekrar guncel sifreleriyle olusturalim.  
            ' IF(SUSER_ID(' + QUOTENAME(@kullaniciAdi, '''') + ') IS NOT NULL) BEGIN DROP LOGIN ' + QUOTENAME(@kullaniciAdi) + ' END;' +
            ' CREATE LOGIN ' + QUOTENAME(@kullaniciAdi) +
            ' WITH PASSWORD = ' + @kullaniciSifre + ' HASHED; ' +
 
            -- Veritabani seviyesindeki kullaniciyi da silelim ve yeniden yukaridaki giris kullanicisiyla eslesmis sekilde olusturalim.
            ' USE NAVISION; IF (EXISTS (SELECT * FROM sys.database_principals WHERE name = N''' + @kullaniciAdi + ''')) BEGIN DROP USER [' + @kullaniciAdi + '] END; ' +
            ' CREATE USER [' + @kullaniciAdi + '] FOR LOGIN [' + @kullaniciAdi + '] WITH DEFAULT_SCHEMA = [dbo]; ' + 
            ' USE NAVISION; EXEC sp_addrolemember N''db_owner'', N''' + @kullaniciAdi + '''; ' + CHAR(10);
        FETCH NEXT FROM @kullaniciCursor INTO @kullaniciAdi, @kullaniciSifre
      END
    CLOSE @kullaniciCursor;
    DEALLOCATE @kullaniciCursor; 
    --PRINT (@strSql);
    IF (@strSql <> '')
        BEGIN
            EXEC(@strSql) ; 
        END
    GO
 
Test sunucusuna NAVISION veritabanını ilk defa yüklüyorsanız, içerisinde 4616 geçen bir hata aldıysanız, öncelikle SQL Server Configuration Manager'dan Startup parametrelerine -4616 parametresini eklemeniz gerekiyor.
Sonra da aşağıdaki scripti çalıştırmanız gerekiyor.
USE [master]
GO
 
/****** Object:  ExtendedStoredProcedure [dbo].[xp_ndo_enumusergroups]    Script Date: 11.04.2015 09:00:41 ******/
EXEC dbo.sp_addextendedproc N'[dbo].[xp_ndo_enumusergroups]'
    ,'C:\Program Files\Microsoft SQL Server\MSSQL11.LOCALDB2\MSSQL\Binn\xp_ndo_x64.dll'
GO
/*========================*/
USE [master]
GO
 
/****** Object:  ExtendedStoredProcedure [dbo].[xp_ndo_enumusersids]    Script Date: 11.04.2015 09:00:52 ******/
EXEC dbo.sp_addextendedproc N'[dbo].[xp_ndo_enumusersids]'
    ,'C:\Program Files\Microsoft SQL Server\MSSQL11.LOCALDB2\MSSQL\Binn\xp_ndo_x64.dll'
GO
/*========================*/
GRANT EXECUTE
    ON [xp_ndo_enumusergroups]
    TO PUBLIC
GO
/*========================*/
GRANT EXECUTE
    ON [xp_ndo_enumusersids]
    TO PUBLIC
GO
 
-- Yukaridaki DLL'e Everyone yetkisi de verdim. Baska bir yerde okudugum bir oneriye istinaden.
-- DLL'lerin ilgili dizinlerde olmasi lazim.
-- SQL Server Configuration Manager acilip, bizim Sql Server sunucusunu secip, Advanced sekmesinde
---- Startup Parameters kismina cift tiklayarak sonuna ";-t4616" ekliyoruz.
 
Saygılar...
# Kategoriler : Navision Veritabanı
# Etiketler : Etiket Yok
# Yorumlar : 0 Yorum Yorum Yaz
Arama
  Ara
Sayfalar
Takvim
<Temmuz 2017>
PSÇPCCP
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456
Bağlantılar