Benutzer mit den meisten Antworten
[Sql2014] Flasche Einstellung der Set Option

Frage
-
Hallo,
ich habe folgende Gespeicherte Prozedur:
CREATE PROCEDURE InstallUser -- Add the parameters for the stored procedure here @username varchar(255), @password varchar(255), @name varchar(255), @mail varchar(255), @isSupervisor tinyint, @userGroupCode varchar(255) AS BEGIN if not exists (Select * From [User] where [Username] = @username) AND Len(@password) > 0 AND LEN(@username) > 0 BEGIN declare @source varbinary(max); declare @encoded varchar(255); set @source = (Select HashBytes('MD5', @password)); set @encoded = cast('' as xml).value('xs:base64Binary(sql:variable("@source"))', 'varchar(max)'); Insert Into [User]([Username], [Password], [Name], [Mail], [IsSupervisor], [StorageDate], [StorageUser], [LastChange], [LastUser], [LastComputer]) VALUES(@username, @encoded, @name, @mail, @isSupervisor, getdate(), 'Install', getdate(), 'Install', '') if exists (Select * From [UserGroup] Where Code = @userGroupCode) BEGIN Insert Into [UserGroupAssignment]([UserID], [GroupID], [StorageDate], [StorageUser]) VALUES ((Select Top 1 ID From [User] Where [Username] = @username), (Select Top 1 ID From [UserGroup] Where [Code] = @userGroupCode), getdate(), 'Install') END END END GO
Wenn ich diese separat einspiele ist alles in Ordnung. Wir führen hier jedoch im Nightly Build alle SQL Dateien, welche sich auf dem TFS und in dem Branch befinden in einer Datei zusammen und nutzen diese zum einspielen auf dem SQL Server.
Ich erhalte beim einspielen des gesamten Skriptes folgenden Fehler:
Meldung 1934, Ebene 16, Status 1, Prozedur InstallUser, Zeile 161935
Fehler bei SELECT, da die folgenden SET-Optionen falsche Einstellungen aufweisen: 'ANSI_PADDING'. Überprüfen Sie, ob die SET-Optionen für die Verwendung mit indizierte Sichten und/oder Indizes für berechnete Spalten und/oder gefilterte Indizes und/oder Abfragebenachrichtigungen und/oder XML-Datentypmethoden und/oder Vorgänge für räumliche Indizes richtig sind.
Diese Option wieder aber in dem komplett Skript nirgends gesetzt.
Ich weiß allmählich nicht mehr weiter. Wenn Ich den Teil mit MD5 und base64 Konvertierung aus der Prozedur rausnehme klappt alles Einwandfrei. Hat jemand eine Idee?
Beste Grüße
Q-Tec
Antworten
-
Fehler bei SELECT, da die folgenden SET-Optionen falsche Einstellungen aufweisen: 'ANSI_PADDING'. ....
Diese Option wieder aber in dem komplett Skript nirgends gesetzt.Hallo,
die Einstellung ist auf Projektebene und in den Projekteinstellungen unter dem Button "Datenbankeinstellungen" zu finden; prüfe mal, ob das das Häkchen gesetzt ist.
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 17. Oktober 2016 10:34
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 27. Oktober 2016 13:28
-
Hallo Q-Tec,
SET ANSI_PADDING sollte bei der Tabellenanlage/-änderung auf ON gestellt sein, sonst gibt es später Probleme (wie die obige Fehlermeldung). Üblicherweise wird dies bereits vom Treiber (Sql Client, Ole DB, ODBC) richtig gesetzt, ausgenommen man ändert dort die Einstellungen.
Sollte es Tabellenspalten geben, die bereits mit OFF angelegt sind, so empfiehlt es sich dies zu ändern (und ggf. Skripte, die das Problem verursachen). In sys.columns gibt die Spalte is_ansi_padded darüber Auskunft.
Schau Dir die Anmerkungen zu SET Anweisungen an, da gibt es ggf. weitere Einstellungen die überprüft werden müssen. Man sollte heute nur noch die Einstellungen verwenden, die auch für indizierte Sichten notwendig sind - unabhängig davon, ob man sie nutzt, denn alle anderen werden langfristig entfallen.
Unabhängig davon: MD5 sollte man nicht mehr für Kennwort Hashes verwenden, nimm besser SHA2_256 oder SHA2_512. Und ein Salt wäre auch nicht schlecht.
Gruß Elmar
@Olaf: Die Server-/Datenbank-Einstellungen kommen normalerweise nie zum Tragen, da die Treiber die Werte einstellen. "Richtig" sollten sie jedoch sein.
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 17. Oktober 2016 10:34
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 27. Oktober 2016 13:28
Alle Antworten
-
Fehler bei SELECT, da die folgenden SET-Optionen falsche Einstellungen aufweisen: 'ANSI_PADDING'. ....
Diese Option wieder aber in dem komplett Skript nirgends gesetzt.Hallo,
die Einstellung ist auf Projektebene und in den Projekteinstellungen unter dem Button "Datenbankeinstellungen" zu finden; prüfe mal, ob das das Häkchen gesetzt ist.
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 17. Oktober 2016 10:34
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 27. Oktober 2016 13:28
-
Hallo Q-Tec,
SET ANSI_PADDING sollte bei der Tabellenanlage/-änderung auf ON gestellt sein, sonst gibt es später Probleme (wie die obige Fehlermeldung). Üblicherweise wird dies bereits vom Treiber (Sql Client, Ole DB, ODBC) richtig gesetzt, ausgenommen man ändert dort die Einstellungen.
Sollte es Tabellenspalten geben, die bereits mit OFF angelegt sind, so empfiehlt es sich dies zu ändern (und ggf. Skripte, die das Problem verursachen). In sys.columns gibt die Spalte is_ansi_padded darüber Auskunft.
Schau Dir die Anmerkungen zu SET Anweisungen an, da gibt es ggf. weitere Einstellungen die überprüft werden müssen. Man sollte heute nur noch die Einstellungen verwenden, die auch für indizierte Sichten notwendig sind - unabhängig davon, ob man sie nutzt, denn alle anderen werden langfristig entfallen.
Unabhängig davon: MD5 sollte man nicht mehr für Kennwort Hashes verwenden, nimm besser SHA2_256 oder SHA2_512. Und ein Salt wäre auch nicht schlecht.
Gruß Elmar
@Olaf: Die Server-/Datenbank-Einstellungen kommen normalerweise nie zum Tragen, da die Treiber die Werte einstellen. "Richtig" sollten sie jedoch sein.
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 17. Oktober 2016 10:34
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 27. Oktober 2016 13:28