Laden...

VSEE2008 + MSSQL2008 SQL Server Projekt SHA-256

Erstellt von Afrokalypse vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.201 Views
A
Afrokalypse Themenstarter:in
452 Beiträge seit 2005
vor 13 Jahren
VSEE2008 + MSSQL2008 SQL Server Projekt SHA-256

verwendetes Datenbanksystem: MSSQL2008

Hallo zusammen,
ich habe diesen Artikel entdeckt: http://sqlblog.com/blogs/michael_coles/archive/2009/04/16/13253.aspx

Laut MSDN http://msdn.microsoft.com/en-us/library/w2kae45k%28v=VS.80%29.aspx
soll man ein SQL Server Projekt erstellen. Ich habe VSEE2008, scheinbar habe ich diesen Projekttyp nicht.
Deshalb habe ich gehofft, dass man das ganze auch einfach per DLL machen kann.
also habe ich den Code als DLL erstellt und im MSSQL Server als Assembly hinzugefügt.

Bis hierhin hat alles funktioniert. Nur lässt sich die Funktion GetHash nicht aufrufen.
Ich erhalte immer die Meldung
"'GetHash' wird nicht als Name einer integrierten Funktion erkannt."

Frage1: Lässt sich das überhaupt als DLL mit VSEE2008 machen?
Frage2: Wenn ja, warum lässt sich die Funktion nicht aufrufen? Muss ich noch was beachten?

Danke für die Hilfe

Afr0

Signatur:
Die Signatur wird unter Ihren Beiträgen dargestellt.

😁 😮 ?( 8) 😭 8o :] 🙁 =) X( 🙂 😜 😉 :rolleyes: 👶 :evil: 👅
Smilies find ich doof =]

3.511 Beiträge seit 2005
vor 13 Jahren

Hallo,

hast du die Assembly auch richtig registriert im SQL Server? Bzw. zeige mal bitte den Code der c# Klasse und das SQL für die Registrierung.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

A
Afrokalypse Themenstarter:in
452 Beiträge seit 2005
vor 13 Jahren

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
using System.Security.Cryptography;

namespace sha_hash
{
    public class UserDefinedFunctions

    {
        [Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true, DataAccess = DataAccessKind.None)]

        public static SqlBytes GetHash(SqlString Algorithm, [SqlFacet(MaxSize = -1)] SqlBytes Plaintext)
        {
            if (Algorithm.IsNull || Plaintext.IsNull)
                return SqlBytes.Null;
            bool HashDefined = true;
            HashAlgorithm Hash = null;
            switch (Algorithm.Value.ToUpper())
            {
                case "SHA256":
                    Hash = new SHA256Managed();
                    break;
                case "SHA384":
                    Hash = new SHA384Managed();
                    break;
                case "SHA512":
                    Hash = new SHA512Managed();
                    break;
                default:
                    HashDefined = false;
                    break;
            }
            if (!HashDefined)
            {
                throw new Exception("Unsupported hash algorithm - use SHA256, SHA384 or SHA512");
            }
            byte[] HashBytes = Hash.ComputeHash(Plaintext.Value);
            // Convert result to a SqlBytes value
            return new SqlBytes(HashBytes);
        }
    }
}

und


CREATE ASSEMBLY sha_hash FROM dateipfad WITH PERMISSION_SET = SAFE

Als Fehlermeldungen erhalte ich wenn ich den Assemblynamen mit nutze:

'Die "sha_hash"-Spalte oder die benutzerdefinierte Funktion bzw. das benutzerdefinierte Aggregat "sha_hash.UserDefinedFunctions.GetHash" wurde nicht gefunden, oder der Name ist mehrdeutig.'

VG

Signatur:
Die Signatur wird unter Ihren Beiträgen dargestellt.

😁 😮 ?( 8) 😭 8o :] 🙁 =) X( 🙂 😜 😉 :rolleyes: 👶 :evil: 👅
Smilies find ich doof =]

3.511 Beiträge seit 2005
vor 13 Jahren

Hi,

du hast zwar jetzt die Assembly im SQL Server registriert, aber die Funktion selber noch nicht. Das musst du zusätzlich machen. In deinem Falle wäre es also


CREATE FUNCTION [dbo].sha_hash(@Algorithm [NVARCHAR](100), @Plaintext [VARBINARY](MAX))
RETURNS VARBINARY(MAX)
AS 
EXTERNAL NAME [sha_hash].[sha_hash.UserDefinedFunctions].[GetHash]

SELECT dbo.sha_hash( 'SHA256', CAST('Hallo' AS VARBINARY))

Dazu siehe CREATE FUNCTION (Transact Sql) letzter Abschnitt

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

A
Afrokalypse Themenstarter:in
452 Beiträge seit 2005
vor 13 Jahren

Hi Khalid,
ich habe vergessen die Funktion zu registrieren.
Jetzt klappt es 😃
Danke

Signatur:
Die Signatur wird unter Ihren Beiträgen dargestellt.

😁 😮 ?( 8) 😭 8o :] 🙁 =) X( 🙂 😜 😉 :rolleyes: 👶 :evil: 👅
Smilies find ich doof =]