Beagol Geschrieben 5. September 2006 Teilen Geschrieben 5. September 2006 Guten Tag! Im SQL Server 2000 gab es im Enterprisemanager unter den Servereinstellungen das nette Flag "Direkte Änderungen im Systemkatalog zulassen" Kann mir jemand sagen, wo ich diese Einstellung unt er 2005 im Managment Studio finden kann? Ich such mir hier nen Wolf! Gruß Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 5. September 2006 Teilen Geschrieben 5. September 2006 Ich such mir hier nen Wolf! Viel Spass mit deinem Wolf Ich muss dich leider enttaeuschen. Das was du suchst wird nicht mehr unterstuetzt bei, SQL Server 2005. Informationen findest dazu, wenn du irgendwo unter sp_configure nachschaust. Die Option die du damit umstellen wolltest nennt sich ansich "allow updates". Goos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Beagol Geschrieben 5. September 2006 Autor Teilen Geschrieben 5. September 2006 ja..... und nu? Ich bin kein großer SQL Admin. Eher Admin einer Software, die darauf aufsetzt. Teil der Wartung dieser Software beinhaltet nun ein Script, welches diese Funktion freigeschaltet braucht. Was kann man nun tun? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 5. September 2006 Teilen Geschrieben 5. September 2006 Nuja, die Software wurde wohl fuer den MS SQL Server 2000 geschrieben und darauf sollte sie auch weiterhin aufsetzen. Ansonsten hat halt eine fehlerhafte Portierung nach SQL Server 2005 stattgefunden und die Software muss noch angepasst werden. ...so seh ich das, auch wenns leicht gesagt ist Goos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Beagol Geschrieben 5. September 2006 Autor Teilen Geschrieben 5. September 2006 Jo, is leicht gesagt Es handelt sich nicht um ein Script in der Software, sondern ein Script "neben" der Software. Ist wirklich eher Datenbanknah. Folgendes: Ich habe eine Datenbank beim Kunden. In dieser Datenbank befinden sich Benutzer. Diese Benutzer sind natürlich auch der SQL Server Engine (ich denke das macht die master DB, oder?) des Kunden bekannt. Nun mache ich einen Dump. Eine Sicherung. Diese Sicherung nehme ich mit und spiele diese auf eine andere Datenbank auf einem anderen Server. Die Benutzer bleiben in der DB. Aber die ander SQL Server Engine kennt sie noch nicht. Nun gibt es also ein Script, welches "verwaiste Benutzer" heißt . Treffend, denn die Benutzer sind in der DB verwaist, da der Server sie nicht kennt. Das Script korrigiert das und portiert die Benutzer auf den neuen SQL Server. Das braucht nun diese Adhocänderungen. Hier das Script: -- Verwaiste Benutzer.sql declare @my_name sysname, @my_sid binary(16), @my_passwd sysname declare cur1 cursor for select name, sid from sysusers where issqluser = 1 and hasdbaccess = 1 and name <> 'dbo' declare @my_sid2 binary(16), @my_database sysname set @my_database = db_name() open cur1 fetch next from cur1 into @my_name, @my_sid while @@fetch_status = 0 begin if (not exists (select * from [master].[dbo].[syslogins] where name = @my_name)) begin set @my_passwd = case @my_name when 'KW' then 'SYSADM' when 'FIBU' then 'SYSADM' when 'VERSION' then 'SYSADM' when 'SYSADM' then 'SYSADM' else 'Passwort' end exec sp_addlogin @loginame = @my_name, @passwd = @my_passwd, @sid = @my_sid, @defdb = @my_database print 'SQL Server Benutzername ' + @my_name + ' erstellt' end else begin select @my_sid2 = sid from [master].[dbo].[syslogins] where name = @my_name if @my_sid <> @my_sid2 begin begin transaction update sysusers set sid = @my_sid2 where name = @my_name commit transaction print 'SID von ' + @my_name + ' geaendert' end end fetch next from cur1 into @my_name, @my_sid end close cur1 deallocate cur1 Wie kann ich das nun auf SQL Server 2005 anwenden? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 5. September 2006 Teilen Geschrieben 5. September 2006 Dir kann wohl geholfen werden Das Problem ist ja nur der direkte Zugriff da update sysusers set sid = @my_sid2 where name = @my_name Wenn du aber an dieser Stelle nicht manuell die sid aenderst, sondern den Zugriff auf die DB neu erteilst (per sp_revokedbaccess und sp_grantdbaccess), dann wird die sid automatisch vom Login uebernommen und alles passt wieder. Goos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Beagol Geschrieben 5. September 2006 Autor Teilen Geschrieben 5. September 2006 Ähm..... :confused: Kannst Du bitte mal.... Ich nix können! Büte! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 5. September 2006 Teilen Geschrieben 5. September 2006 Nuja, wenn du es folgendermassen machst, dann stimmt die sid wieder mit der des Logins ueberein. Aber VORSICHT! ...da der Zugriff erneut gewaehrt wurde sind natuerlich die Berechtigungen, welche dem Benutzer vorher in der DB zugeteilt wurden nicht mehr vorhanden Von daher vermute ich mal, dass es dir so nicht viel nuetzen wird. Das mit den Berechitgungen waer dann ne Stufe komplizierter. -- Verwaiste Benutzer.sql declare @my_name sysname, @my_sid binary(16), @my_passwd sysname declare cur1 cursor for select name, sid from sysusers where issqluser = 1 and hasdbaccess = 1 and name <> 'dbo' declare @my_sid2 binary(16), @my_database sysname set @my_database = db_name() open cur1 fetch next from cur1 into @my_name, @my_sid while @@fetch_status = 0 begin if (not exists (select * from [master].[dbo].[syslogins] where name = @my_name)) begin set @my_passwd = case @my_name when 'KW' then 'SYSADM' when 'FIBU' then 'SYSADM' when 'VERSION' then 'SYSADM' when 'SYSADM' then 'SYSADM' else 'Passwort' end exec sp_addlogin @loginame = @my_name, @passwd = @my_passwd, @sid = @my_sid, @defdb = @my_database print 'SQL Server Benutzername ' + @my_name + ' erstellt' end else begin select @my_sid2 = sid from [master].[dbo].[syslogins] where name = @my_name if @my_sid <> @my_sid2 begin exec sp_revokedbaccess @my_name exec sp_grantdbaccess @my_name print 'SID von ' + @my_name + ' geaendert, aber das stimmt nicht wirklich ' end end fetch next from cur1 into @my_name, @my_sid end close cur1 deallocate cur1[/code] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Beagol Geschrieben 5. September 2006 Autor Teilen Geschrieben 5. September 2006 Aber VORSICHT! ...da der Zugriff erneut gewaehrt wurde sind natuerlich die Berechtigungen, welche dem Benutzer vorher in der DB zugeteilt wurden nicht mehr vorhanden Diesen Satz verstehe ich nicht Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 6. September 2006 Teilen Geschrieben 6. September 2006 Das ist nicht gut so Ich versteh aber auch nicht was du nicht verstehst. Es ist moeglich, dass der Benutzer zum Beispiel vorher in der DB auf bestimmte Tabellen zugreifen durfte und auf andere Tabelle der DB keinen Zugriff hatte (war einfach mal von jemandem so eingestellt worden... moeglicherweise sogar von dir? ) Diese Zuordnung von Zugriffsberechtigungen ist nach der oben vorgestellten Methode nicht mehr vorhanden. Goos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Beagol Geschrieben 6. September 2006 Autor Teilen Geschrieben 6. September 2006 Ah! Jetzt ja! also die Rechtezuordnung ist hinüber.... Doof. Wie kann man das hinkriegen? Ich hab das Script nicht geschrieben Sonst würd ich ja hier nicht so doofe Fragen stellen :hells: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 6. September 2006 Teilen Geschrieben 6. September 2006 Auf einfache Weise kann man das nicht wirklich hinkriegen. Zu Fuss (bzw. Hand) ists noch recht einfach zu machen, falls die DB nicht kompliziert aufgebaut ist und es nicht viele Rechte zu verteilen gibt. Es waer aber interessant zu wissen, wieso du das ueberhaupt so machen magst. Vielleicht bieten sich ja dann irgendwelche komplett anderen Loesungswege an. Goos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Beagol Geschrieben 6. September 2006 Autor Teilen Geschrieben 6. September 2006 Also Goos, erstmal herzlichen Dank für Deine Geduld und Hilfe! Auf einfache Weise kann man das nicht wirklich hinkriegen. Zu Fuss (bzw. Hand) ists noch recht einfach zu machen, falls die DB nicht kompliziert aufgebaut ist und es nicht viele Rechte zu verteilen gibt. Nope! Es ist ein Warenwirtschaftssoftware. Hierbei könnten über 100 Benutzer über 500 verschiedene Rechte erhalten.... Schwer das mit der Hand nachzuziehen Es waer aber interessant zu wissen, wieso du das ueberhaupt so machen magst. Ich hatte es oben kurz beschrieben Nun mache ich einen Dump. Eine Sicherung. Diese Sicherung nehme ich mit und spiele diese auf eine andere Datenbank auf einem anderen Server. Wir machen das, um die Datenbank hier vor Ort zu haben und nicht immer per Fernwartung oder sonstige Leitungen auf die produktive Kunden DB zugreifen zu müssen. Um Lösungswege zu erarbeiten oder z.B. neues Reporting zu erstellen. Vielleicht bieten sich ja dann irgendwelche komplett anderen Loesungswege an.Das wäre cool. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 6. September 2006 Teilen Geschrieben 6. September 2006 Ok, versuchs mal damit: -- Verwaiste Benutzer.sql declare @my_name sysname, @my_sid binary(16), @my_passwd sysname declare cur1 cursor for select name, sid from sysusers where issqluser = 1 and hasdbaccess = 1 and name <> 'dbo' declare @my_sid2 binary(16), @my_database sysname set @my_database = db_name() open cur1 fetch next from cur1 into @my_name, @my_sid while @@fetch_status = 0 begin if (not exists (select * from [master].[dbo].[syslogins] where name = @my_name)) begin set @my_passwd = case @my_name when 'KW' then 'SYSADM' when 'FIBU' then 'SYSADM' when 'VERSION' then 'SYSADM' when 'SYSADM' then 'SYSADM' else 'Passwort' end exec sp_addlogin @loginame = @my_name, @passwd = @my_passwd, @sid = @my_sid, @defdb = @my_database print 'SQL Server Benutzername ' + @my_name + ' erstellt' end else begin select @my_sid2 = sid from [master].[dbo].[syslogins] where name = @my_name if @my_sid <> @my_sid2 begin exec sp_change_users_login 'Update_One', @my_name, @my_name print @my_name + ' gemapt' end end fetch next from cur1 into @my_name, @my_sid end close cur1 deallocate cur1 Sollte meiner Meinung nach deine Probleme loesen. Goos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Beagol Geschrieben 6. September 2006 Autor Teilen Geschrieben 6. September 2006 Danke! Ich hoffe, ich kann es bald testen! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 6. September 2006 Teilen Geschrieben 6. September 2006 Soll ich dir vielleicht schonmal meine Kontonummer durchgeben? Goos, in der Hoffnung, dass es auch funktioniert. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.