Wednesday, November 29, 2017

Restore encrypted database on another server

Wenn man versucht eine verschluesselte Datenbank auf einem neuen Server wiederherzustellen, bekommt man den folgenden Fehler:

Msg 33111, Level 16, State 3, Line 4 Cannot find server certificate with thumbprint '0x9CEACF12A2671515B3EXXXXXXXXXXXXXXXXXXXXXX'. Msg 3013, Level 16, State 1, Line 4 RESTORE DATABASE is terminating abnormally.


Der Grund ist es, dass auf dem neuen Server der Service Master Key anders ist und keine Master key und Certificate vorhanden sind. Sie muessen restored bzw. erstellt werden. -- Einmalig, danach ist der service master key immer der neue. Ihn kann man nicht droppen. Er steht ganz oben in der Encryption Hierarchy. Jede sql server Instanz hat einen service master key

RESTORE SERVICE MASTER KEY FROM FILE = 'E:\Cert\ServiceMasterKey' DECRYPTION BY PASSWORD = 'password';
GO

-- diese keys muessen davor mit backup gesichert sein. Hier wird es restore gemacht.

RESTORE MASTER KEY FROM FILE = 'E:\Cert\MasterKey'
  DECRYPTION BY PASSWORD = 'password'
 ENCRYPTION BY PASSWORD = 'password'
GO

dann muss der key geoeffnet und das certificate erstellt werden
wenn man folgende Befehle nicht ausfuehrt, bekommt man den folgenden Fehler:

Msg 15581, Level 16, State 7, Line 26 Please create a master key in the database or open the master key in the session before performing this operation.

OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'
go
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
GO
CREATE CERTIFICATE XXXCertificate
FROM FILE = 'E:\Cert\Certificate' WITH PRIVATE KEY
(FILE = 'E:\Cert\CertificateKey' , DECRYPTION BY PASSWORD = 'password');
GO

-- nun kann man die Datanbank wiederherstellen.

Wednesday, June 28, 2017

Cannot fetch a row from OLE DB provider "ADSDSOObject" for linked server

Meine Abfrage sollte alle Benutzer in einer bestimmten AD-Gruppe selektieren.

Wenn man so eine Fehlermeldung (Cannot fetch a row from OLE DB provider "ADSDSOObject" for linked server) bekommt, hat es meistens mit der Anzahl der "OLEDB Provider for Directory Services" abgefragten Daten zu tun.

Den Schwellenwert-Vorschlag 901 habe ich nicht gesehen und auch nicht probiert. Die Daten waren 18000+. Und eine andere Abfrage brachte schon 17403 Datensaetze. Also der Wert musste deutlich hoeher sein als 901. Ich habe dann ueber sAMAccountName eine Paging eingebaut.

SELECT sAMAccountname FROM OPENQUERY (ADS, ';(&amp;(&amp;(&amp;(objectCategory=person)(memberof=CN=DE-BW-Sales,OU=Groups,DC=consto,DC=com))(sAMAccountName<=d))(sAMAccountName>=a));sAMAccountname;subtree') ORDER BY Samaccountname

Bei dem kleiner-gleich Operator wird das Gleichheitszeichen ignoriert. Also hier kommen nur die User, deren Benutzernamen mit a, b und c anfangen.

Sunday, June 18, 2017

LDAP Query

The active directory services on your domain controller allows querying objects within T-SQL. During the preparation for the exam 70-462 I had to build up a domain in which I joined 6 computers. The domain is called consto (not contoso!). Here is how to query against the ADSI (active domain service interface).

1) Using a linked Server (Linked server is called ADSI)

you use OPENQUERY to get results over a linked server:

SELECT * FROM OPENQUERY( ADSI, 'SELECT Name, displayName,givenname,distinguishedName, SAMAccountName FROM ''LDAP://consto.com/cn=users,dc=consto,dc=com''')

here is users a container and therefore it must be classified with cn. In order to link the server you must provide the credentials of a user, which has right to read the informarmation from AD

2) Using direct access

you use OPENROWSET to access the AD Service

SELECT Name, displayName,givenname,distinguishedName, SAMAccountName, telephoneNumber

FROM

OPENROWSET('ADSDSOObject','adsdatasource'; 'consto\kim_akers';'herecomespassword*****',

'SELECT Name, displayName,givenname,telephoneNumber, distinguishedName, SAMAccountName

FROM ''LDAP://consto.com/cn=users,dc=consto,dc=com''')

You can find out the list of the attributes using the Active Directory Explorer v1.44 by Mark Russinovich [click here]

Sunday, January 3, 2016

IsNull vs Coalesce

 

Stellt ihr den folgenden TSQL Code vor:

declare @c varchar(10) = 'hallo welt'
declare @n varchar(5) = null

select coalesce(@n, @c) as [coalesce], isnull(@n, @c) as [isnull]

create table A (col1 varchar(10))
insert into A select 'value1'

select coalesce(col1, '') as Col1, isnull(col1, '') as Col2 into mytemp from A;
go

sp_help mytemp

Der Output lautet:

IsNull_Coalesce

Da sieht man, dass IsNull den Datentyp von dem ersten Parameter nimmt, wobei Coalesce von dem zweiten. Ausserdem bei einem Select Into Statement werden die Nullable Eigenschaften der Felder von der Zieltabelle unterschiedlich gesetzt.

Friday, March 2, 2012

Dokumentmodus Entwicklertools IE (document mode developer tools IE)

 

Die gängigen Webbrowser identifizieren den Dokumentmodus einer geladenen Seite automatisch. Manchmal kann das aber scheitern, dass der gewünschte Modus nicht gewählt wird. Dann sieht die Webseite plötzlich anders aus als man sich vorgestellt hatte.

Dieses Phänomen kann mit META Information überwunden werden.

 

image

Wenn man seiner HTML Seite den header “X-UA-Compatible“ addiert, kann man den Dokumentmodus festlegen:

 

  1: ...
  2: <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" >
  3: <link rel="stylesheet" href="css/global.css" type="text/css" />
  4: ...
 

Tuesday, April 19, 2011

This collection already contains an address with scheme http. There can be at most one address per scheme in this collection

I entwickle zurzeit eine mobile Anwendung für mein WP7, damit ich die Abwesenheit und die Noten meiner Schüler immer parat habe.

So habe ich einen WCF-Service für Silverlight geschrieben und auf meine Website hochgeladen. Als ich die Service-Definition aufrufen wollte, bekam ich einen Fehler vom Webserver:

“This collection already contains an address with scheme http. There can be at most one address per scheme in this collection”

Lokal habe ich IIS 7.5 mit ASP.Net 4.0 als Webserver und VS2010 als Entwicklungsumgebung. Der Webserver meiner Website hingegen hat ASP.Net 3.5 im Einsatz. Nach einer Recherche im Internet bin ich auf unteren Artikel gelandet:

http://blogs.msdn.com/b/rampo/archive/2008/02/11/how-can-wcf-support-multiple-iis-binding-specified-per-site.aspx

Also habe ich folgende Änderung vorgenommen:

In der web.config habe ich einen Filter für das Präfix der Base-Adresse definiert:

  1: <system.serviceModel>
  2: 
  3: <serviceHostingEnvironment>
  4: 
  5: <baseAddressPrefixFilters>
  6:  
  7:         <add prefix=”http://www.birsoft.biz/>
  8: 
  9: </baseAddressPrefixFilters>
 10:  
 11: </serviceHostingEnvironment>
 12:  
 13: </system.serviceModel>
 14: 

 



Jetzt funktionert mein WCF-Service.



Stay tuned!

Sunday, April 3, 2011

A fatal error occured while trying to sysprep the machine

Als ich mein vorinstalliertes System mit Sysprep generalisieren wollte, trat folgender Fehler auf:

“A fatal error occured while trying to sysprep the machine”

Nachdem ich die Log-Datei unter dem “Panther” Folder gelesen habe, habe ich festgestellt, dass drmv2ctl.dll das Problem verursachte.

2011-04-03 11:56:12, Error      [0x0f0082] SYSPRP LaunchDll:Failure occurred while executing 'drmv2clt.dll,Sysprep', returned error code -2147024864[gle=0x00000020]

Die ist eine DLL-Datei, die von dem Prozess “wmpnetwk.exe” referenziert und vom Digital Right Management zuständig ist. Ich habe diesen Prozess gekillt und den Sysprep nochmal ausgeführt. Lief einwandfrei.