Jump to content

McKloony

Members
  • Gesamte Inhalte

    35
  • Registriert seit

  • Letzter Besuch

Über McKloony

  • Geburtstag 14.08.1969

Profile Fields

  • Member Title
    Newbie

Letzte Besucher des Profils

Der "Letzte Profil-Besucher"-Block ist deaktiviert und wird anderen Benutzern nicht angezeit.

Fortschritt von McKloony

Enthusiast

Enthusiast (6/14)

  • Erste Antwort
  • Engagiert
  • Erster eigener Beitrag
  • Eine Woche dabei
  • Einen Monat dabei

Neueste Abzeichen

10

Reputation in der Community

  1. McKloony

    Case When Abfrage

    Ich versuche ein View auf eine Tabelle zu erstellen, die mehrere Felder enthält, die aber nicht immer einen Wert enthalten. Der Inhalt einiger Felder ist dann NULL. Hier ein Beispiel: Feld1 Feld2 Feld3 Feld4 Wert Null Wert Wert Null Null Wert Null Wert Wert Null Wert Mein Ziel die Werte aller Felder in einem neuen Feld des Views ausgeben zu lassen. Feld1 + ' ' + Feld + ' ' + Feld3 + ' ' + Feld4 As Neufeld funktioniert leider nur insoweit, dass nur dann etwas angezeigt wird, wenn alle vier Felder einen Wert enthlaten. CASE WHEN Feld1 IS NOT NULL THEN Feld1 + ' ' + CASE WHEN Feld2 IS NOT NULL THEN Feld2 + ' ' + CASE WHEN Feld3 IS NOT NULL THEN Feld3 Funktioniert auch nur dann, wenn alle Felder einen Wert enthalten. Weiß jemand eine Lösung?
  2. Auf einem Rechner ist das Management Studio 2012 sowie 2016 installiert. Das Management Studio bringt die SQLCDM.exe mit. Diese ist jetzt auch zweimal vorhanden. Wie kann ich sicherstellen, dass beim Aufruf die neuste Version verwendet wird?
  3. Mein Management Studio Anmeldedialog listet im Auswahlfeld immer noch Logins auf, die bereits gelöscht wurden. Kenn jemand evtl. einen Reg Key, wo man das bearbeiten kann?
  4. Das ist ja das Dilemma, beim SQL Server hat man ja nur die Wahl zwischen Windows Authentifizierung und dem gemischten Modus. Eine "pure" SQL Server Anmeldung gibt es nicht. Eventuell wird es von Microsoft mal eine Windows Server Rolle geben, die man einem technischem Admin Entziehgen kann, der den Zugriff auf den SQL Server Dienst regelt.
  5. Der Admin soll ja alles können, aber eben nicht die Datensätze lesen. Das Problem hatte wohl auch die NSA mit Edward Snowdan :-)
  6. Ich habe mich mit sa als sysadmin im SQL Server angemeldet und einfach den Server Login für den dort vorhandenen Windows Admin User entfernt. Jetzt sollte es eigentlich nur noch möglich sein, sich mit sa anzumelden, wenn man sysadmin Rechte haben möchte. Allerdings ist es für einen echten Windows Admin möglich, über das Commandfenster und der Anweisung "sqlservr.exe -m" den SQL Server im administrativen Modus zu starten und sich dann insgeheim ein neues Login mit allen Rollen zu erstellen, aber das werde ich auch noch irgendwie absichern. Das Beste wäre natürlich, dass man im Active Directory einen Windows Admin anlegen könnte, dem die Möglichkeiten fehlen, selber weitere Windows User anzulegen. Dann könnte man diesem Admin versuchen die Rollen zu entziehen, auf den SQL Server zuzugreifen.
  7. Bei einem SQL 2012 habe ich ein Script geschrieben, welches einer Datenbank einen Admin User und einen Standard User hinzufügt. Dem Admin User werden alle Rollen entzogen, die ihm ermöglichen, eine SELECT Anweisung auf Datensätze auszuführen. Er soll diese ja nicht sehen, sondern nur arbeiten am Sever und der Struktur der Datenbank durchführen. Der Standard User soll dagegen mit den Daten arbeiten können, also Lesen und Schreiben aber selber keine administrativen Änderungen durchführen können. USER MASTER GO DROP PROCEDURE USP_CREATE_LOGIN_STANDARD GO DROP PROCEDURE USP_CREATE_LOGIN_ADMIN GO CREATE PROCEDURE USP_CREATE_LOGIN_STANDARD ( @DefaultDatabase nvarchar(50), @LoginName nvarchar(50), @LoginPassword nvarchar(50), @DefaultSchema nvarchar(50), @User nvarchar(50)) AS BEGIN SET NOCOUNT ON DECLARE @SQL nvarchar(max) SET @SQL = 'IF NOT EXISTS (SELECT name FROM sys.syslogins WHERE name = ''' + @LoginName + ''')' + 'BEGIN ' + 'USE master; ' + 'CREATE LOGIN ' + @LoginName + ' WITH PASSWORD = ''' + @LoginPassword + ''', DEFAULT_DATABASE = ' + @DefaultDatabase + ', CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF; ' + 'PRINT(''New login ''''' + @LoginName + ''''' has been successfully created.'')' + 'END ' + 'ELSE ' + 'BEGIN ' + 'PRINT(''Login ''''' + @LoginName + ''''' already exists!!!'')' + 'END' EXECUTE (@SQL) SET @SQL = 'USE ' + @DefaultDatabase + '; ' + 'IF NOT EXISTS (SELECT name FROM sys.sysusers WHERE name = ''' + @User + ''')' + 'BEGIN ' + 'CREATE USER ' + @User + ' FOR LOGIN ' + @LoginName + '; ' + 'PRINT(''New user ''''' + @User + ''''' has been successfully created.'')' + 'END ' + 'ALTER USER ' + @User + ' WITH DEFAULT_SCHEMA = ' + @DefaultSchema + '; ' + 'EXEC sp_droprolemember ''db_accessadmin'', ' + @User + '; ' + 'EXEC sp_droprolemember ''db_backupoperator'', ' + @User + '; ' + 'EXEC sp_droprolemember ''db_datareader'', ' + @User + '; ' + 'EXEC sp_droprolemember ''db_datawriter'', ' + @User + '; ' + 'EXEC sp_droprolemember ''db_ddladmin'', ' + @User + '; ' + 'EXEC sp_droprolemember ''db_denydatareader'', ' + @User + '; ' + 'EXEC sp_droprolemember ''db_denydatawriter'', ' + @User + '; ' + 'EXEC sp_droprolemember ''db_owner'', ' + @User + '; ' + 'EXEC sp_droprolemember ''db_securityadmin'', ' + @User + '; ' + 'EXEC sp_addrolemember ''db_owner'', ' + @User + '; ' + 'EXEC sp_addrolemember ''db_datareader'', ' + @User + '; ' + 'EXEC sp_addrolemember ''db_datawriter'', ' + @User + '; ' + 'PRINT(''Privileges for user ''''' + @User + ''''' altered!!!'')' EXECUTE (@SQL) END GO CREATE PROCEDURE USP_CREATE_LOGIN_ADMIN ( @DefaultDatabase nvarchar(50), @LoginName nvarchar(50), @LoginPassword nvarchar(50), @DefaultSchema nvarchar(50), @User nvarchar(50)) AS BEGIN SET NOCOUNT ON; DECLARE @SQL nvarchar(max) SET @SQL = 'IF NOT EXISTS (SELECT name FROM sys.syslogins WHERE name = ''' + @LoginName + ''')' + 'BEGIN ' + 'USE master; ' + 'CREATE LOGIN ' + @LoginName + ' WITH PASSWORD = ''' + @LoginPassword + ''', DEFAULT_DATABASE = ' + @DefaultDatabase + ', CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF; ' + 'PRINT(''New login ''''' + @LoginName + ''''' has been successfully created.'')' + 'END ' + 'ELSE ' + 'BEGIN ' + 'PRINT(''Login ''''' + @LoginName + ''''' already exists!!!'')' + 'END' EXECUTE (@SQL) SET @SQL = 'USE ' + @DefaultDatabase + '; ' + 'IF NOT EXISTS (SELECT name FROM sys.sysusers WHERE name = ''' + @User + ''')' + 'BEGIN ' + 'CREATE USER ' + @User + ' FOR LOGIN ' + @LoginName + '; ' + 'PRINT(''New user ''''' + @User + ''''' has been successfully created.'')' + 'END ' + 'ALTER USER ' + @User + ' WITH DEFAULT_SCHEMA = ' + @DefaultSchema + '; ' + 'EXEC sp_droprolemember ''db_accessadmin'', ' + @User + '; ' + 'EXEC sp_droprolemember ''db_backupoperator'', ' + @User + '; ' + 'EXEC sp_droprolemember ''db_datareader'', ' + @User + '; ' + 'EXEC sp_droprolemember ''db_datawriter'', ' + @User + '; ' + 'EXEC sp_droprolemember ''db_ddladmin'', ' + @User + '; ' + 'EXEC sp_droprolemember ''db_denydatareader'', ' + @User + '; ' + 'EXEC sp_droprolemember ''db_denydatawriter'', ' + @User + '; ' + 'EXEC sp_droprolemember ''db_owner'', ' + @User + '; ' + 'EXEC sp_droprolemember ''db_securityadmin'', ' + @User + '; ' + 'EXEC sp_addrolemember ''db_backupoperator'', ' + @User + '; ' + 'EXEC sp_addrolemember ''db_ddladmin'', ' + @User + '; ' + 'PRINT(''Privileges for user ''''' + @User + ''''' altered!!!'')' EXECUTE (@SQL) END GO EXECUTE USP_CREATE_LOGIN_STANDARD @DefaultDatabase = 'Dummy', @LoginName = 'login_standard', @LoginPassword = 'login_standard', @DefaultSchema = 'dbo', @User = 'login_standard_user' EXECUTE USP_CREATE_LOGIN_ADMIN @DefaultDatabase = 'Dummy', @LoginName = 'login_admin', @LoginPassword = 'login_admin', @DefaultSchema = 'dbo', @User = 'login_admin_user' Jetzt habe ich aber das Problem, dass sich ein Admin immer noch mit Windows Authentifizierung anmelden kann und somit wieder Zugriff auf die Daten hat, sprich eine SELECT Anweisung ausführen kann. Welche Rollen muss man dem Active Directory Admin entziehen, damit das nicht mehr möglich ist? Es bringt ja auch nichts, beim SQL Server einen Login für den AD Admin zu generieren und ihm die Rechte dort zu entziehen. Der AD Admin kann ja wiederum einen weiteren AD Admin anlegen, für den im SQL Server kein Login existiert und hat somit wieder Zugriff. Ich finde eine Sicherheitslücke im SQL Server.
  8. Ich weiß nicht ob Du das Problem schon geflößt hast, aber beim SQL 2012 muss er AD User eine bestimmte Server Rolle zugewiesen werden, damit er sich anmelden kann.
  9. Nein das ist so nicht möglich nur innerhalb von Azure Datenbanken, also keine "hybride cloud" http://stackoverflow.com/questions/10740548/sql-azure-replication
  10. Hast Du denn mal einen Blick in das Server Log geworfen? Das Failover kann blockiert werden, wenn eine Anwendung oder ein Dienst auf die Datenbank zugreift und sie blockiert. Das kann auch eine abgestürzte Anwendung sein.
  11. Ich möchte bei einem SQL Server 2008 R2 beziehungsweise SQL Server 2012 Express einen neuen Login erstellen. Dieser Login soll in der Lage ein, neue SQL Server Datenbank anzulegen, zu löschen, Logins für eine Datenbank zu erstellen, Datensätze anzufügen ABER nicht den Inhalt einer Tabelle lesen zu können. Es darf also nicht möglich sein, eine SELECT Anweisung auszuführen. Ziel soll sein, dass es einen Datenbank Admin gibt, der so ziemlich alles machen darf, aber eben nicht die Datensätze selber sehen, exportieren oder drucken darf. Ist so etwas über die standardisierten Serverrollen möglich oder nur, wenn man beim SQL Server 2012 Enterprise eine eigene Serverrolle anleget?
  12. Der Rest ist leider nicht selbsterklärend, sonst hätte ich nicht angefragt. Ich bin der Meiningen, dass es für diese Routineaufgaben auch schon ein fertiges Script geben könnte. Software wie dbcomparer usw. nutze ich selbstverständlich auch, diese kann man aber selbstverständlich nicht an Dritte weitergeben, ein Script eben schon. Trotzdem vielen Dank.
  13. Gibt es ein fertiges Script, dass alle Tabelle, Abfragen und gespeicherte Prozeduren einer bestehenden SQL Datenbank ausließt und in einer anderen SQL Datenbank anlegt? Das ganze ohne Daten.
  14. Der PAUSE Befehl bringt nix, das Command Fenster schließt sich einfach nicht. Aber mit EXIT geht es :-)
  15. Mit SQLCMD führe ich eine vorgefertigtes Script aus: SQLCMD -S ".\SQLEXPRESS" -E -i "c:\Backup\SQL_Create.sql" -o "c:\Backup\SQL_Create.txt" Dieses wird anstandslos ausgeführt und es wird auch die Datei SQL_Create.txt Datei erzeugt. Leider schließt sich danach das CDM Fenster nicht automatisch, man kann also nicht sehen, ob der Befehl ausgeführt wurde. Kennt jemand das Problem und eine Lösung?
×
×
  • Neu erstellen...