Gå til innhold

[Løst]MSSQL/MSDE: legge til bruker i alle fremtidige databaser.


Anbefalte innlegg

Hei!

 

Jeg sitter nå her å jobber med noe jeg ikke har noe peiling på, og trenger jo derfor litt hjelp.

 

Det jeg jobber med er web side som skal vise (bortimot live) hvor mye nett trafikk som går inn og ut av nettet, hastighet osv.

 

Til dette så bruker jeg dataen fra databasene til vår Microsoft ISA server.

 

Jeg får hentet ut data og alt det der, men problemet jeg har nå, er brukeren som jeg henter data med.

 

Jeg lager siden i PHP og den trenger jo en bruker med passord for å hente ut data fra SQL serveren. Denne brukeren har kun db_datareader tilgang i databasene.

 

Problemet er at Microsoft ISA server lager en database for hver dag. Den lager de 1 dag i forveien, slik at morgen dagens database er klar til bruk i dag.

 

Mens jeg nå driver å lager denne nettsiden, så har jeg bare brukt Microsoft SQL server Management Studio til å koble til SQL serveren og legge til brukeren manuelt i dagens database, slik at jeg får testet siden.

 

Dette er jo ikke holdbart når jeg skal ha siden ut av test og inn i produksjon.

 

Derfor tenkte jeg at jeg skulle være smart, og finne en måte å legge til brukeren min hver dag når databasene opprettes.

 

Jeg fant ut at ISA serveren lager databasene ut i fra en fil som heter w3proxy.sql

 

denne inneholder følgende kode:

IF NOT EXISTS (SELECT name FROM sysobjects WHERE name = 'sp_batch_insert' AND type = 'P')
exec sp_executesql N'CREATE PROCEDURE sp_batch_insert @tempTableName nvarchar(100), @tableName nvarchar(100) AS EXECUTE (''INSERT into ['' + @tableName + ''] SELECT * FROM ['' + @tempTableName + '']'') 
	EXECUTE (''truncate table ['' + @tempTableName + '']'')'
GO

CREATE TABLE WebProxyLog (
 [ClientIP]		bigint,
 [ClientUserName]  nvarchar(514),
 [ClientAgent]	 varchar(128),
 [ClientAuthenticate]	smallint,
 [logTime]		 datetime,
 [service]		 smallint,
 [servername]	  nvarchar(32),
 [referredserver]  varchar(255),
 [DestHost]		varchar(255),
 [DestHostIP]	  bigint,
 [DestHostPort]	int,
 [processingtime]  int,
 [bytesrecvd]	  bigint,
 [bytessent]	   bigint,
 [protocol]		varchar(12),
 [transport]	   varchar(8),
 [operation]	   varchar(24),
 [uri]			 varchar(2048),
 [mimetype]		varchar(32),
 [objectsource]	smallint,
 [resultcode]	  int,
 [CacheInfo]	   int,
 [rule]			nvarchar(128),
 [FilterInfo]	  nvarchar(256),
 [srcNetwork]	  nvarchar(128),
 [DstNetwork]	  nvarchar(128),
 [ErrorInfo]	   int,
 [Action]		  varchar(32),
 [GmtLogTime]			datetime,
 [AuthenticationServer]  varchar(255)
)

CREATE CLUSTERED INDEX [iX_WebProxyLog_DateTime] ON [WebProxyLog]([logTime]) ON [PRIMARY]

GO

 

(den første delen der ble ikke noe pen når jeg klippet den inn, men jeg håper dere skjønner det)

 

I ett av mine øyeblikk med brillianse fant jeg ut at dette var jo ikke noe problem!

 

så jeg la til følgende i bunn av filen (etter siste GO):

EXEC sp_addrolemember 'db_datareader', 'isareader'

GO

 

isareader er jo da brukeren som skal ha tilgang (jeg har allerede laget en login for denne brukeren på SQL serveren, så det skal jeg jo ikke trenge å gjøre i skriptet).

 

Dette fungerte glimrende, da det tok ca. 2 min før ISA serveren nektet tilgang ut på internett for alle på nettverket. Fjernet linjen fra .sql filen, og startet ISA serveren på nytt, så fungerte alt igjen.

 

 

Så... Da står jeg her med problemet mitt: Jeg må få til slik at SQL brukeren isareader får db_datareader i alle databaser som blir opprettet på SQL serveren.

 

Noen som har noe tips?

 

Og for all del husk at jeg har ikke veldig mye kompetanse på SQL, så jo enklere forklaringer, jo bedre er det. (alt jeg har gjort så langt, både av SQL og PHP har jeg lest meg til "on-the-fly" mens jeg driver med kodingen.)

 

[EDIT] Kan vel være greit å si hvilken SQL server jeg bruker? SQL servere manager studio sier at det er MSDE 8.0.2050. Dette er vel SQL server 2000? Den følger med som standard på ISA servere innstallasjonen.

Endret av fatalicus
Lenke til kommentar
Videoannonse
Annonse

Jeg kan jo begynne med å fortelle at et login og en user (eksisterer per database) ikke er det samme. De er to forskjellige objekter.

Et login gir en bruker tilgang til å autentisere seg på SQL Server. En user eksisterer i en database (og har rettigheter til f.eks. tabeller og prosedyrer) og må linkes til et login. Navnet på login og user trenger ikke å være det samme, men det er jo greit for leslighetens skyld.

 

Det du har gjort er å anta at det finnes en user som heter isareader. Det finnes et login som heter isareader, men ingen user. Derfor må du først opprette en isareader user, gi denne tilgang til rollen db_datareader, og så knytte denne user mot isreader login.

 

Nå er det mange år siden jeg jobbet med SQL Server 2000 (SQL2005/2008 nå), men jeg tror følgende skal fungere:

 

exec sp_grantdbaccess @loginame = 'isareader',@name_in_db = 'isareader'

exec sp_addrolemember @rolename = 'db_datareader' , @membername = 'isareader'

Lenke til kommentar

ah, den ser jeg.

 

Jeg tenkte ikke over at det kunne være noe slikt, da jeg har lagt til user i databasene via. properties panelet til login-en, for så å legge til db_datareader. (i SQL server manager saken, så kan du på en login krysse av for hvilken databaser den skal ha en user i.)

 

Jeg skal teste ut dette så fort jeg kommer på jobb i morgen!

 

[OPPDATERING]

 

Jeg fikk lagt til kommandoene i .sql file, og så langt har ikke ISA serveren nektet noe som helst.

 

Så jeg får se i morgen tidlig om den nye databasen har blitt laget korrekt.

Endret av fatalicus
Lenke til kommentar

[EDIT] glem dette! Jeg hadde jo glemt å legge på GO etter de to linjene med kommandoer.

 

Legger på den nå, krysser fingrene og håper på det beste!

[/EDIT]

 

hmmm...

 

Det fungerte ikke...

 

Jeg skal prøve en gang til, me denne gangen med en kode som er litt mer lik den jeg hadde første gang:

 

exec sp_grantdbaccess 'isareader', 'isareader'

exec sp_addrolemember 'db_datareader', 'isareader'

 

Så får jeg håpe den ikke kræsjer når jeg har fått på sp_grantdbaccess delen.

Endret av fatalicus
Lenke til kommentar

Nei, her ser det ut til at det er noen som har tullet med meg.

 

isareader har ikke fått noen rettigheter.

 

Jeg sjekket med noen andre som jeg vet kjører isa server, og i følge de så vil ikke det å bruke w3proxy.sql fungere, da den er ment til å brukes når du har databsene på en ekstern SQL server.

 

Men da vet jeg jo at kommandoene dine fungerer kaffenils, jeg må bare finne ut hvor jeg skal legge de for å få de til å fungere!

 

takker for hjelpen!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...