27. september 2000 - 13:43Der er
13 kommentarer og 1 løsning
Flere logins!
Hej!
Jeg er i den situation at jeg har en database, hvor de forskellige logins skal have adgang til forskellige ting. Det vil sige at det ene login kun skal kunne kalde GetThis og GetThat storedprocedurene og det andet login kun skal kunne kalde GetThisAndTaht stored procedure!
Problemet er bare, at hvis det login, der prøver at få fat i den stored procedure ikke selv har oprettet den stored procedure i tidernes morgen, er den stored procedure ikke synlig. Det sige direkte at den stored procedure ikke findes!! Meget mystisk!
Hvad gør jeg galt eller hvad skal jeg gøre for at kunne styre dette!
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
JAMEN du har vel oprettet både tabeller og SP\'s med en dbo authenticated user ??? Derved har du undgået at lave en broken chain... Med en dbo user gør du som du plejer (Query analyzer) GRANT EXECUTE ON din_SP TO din_user_eller_gruppe_eller_role
Det vigtigste er dog at huske at det SKAL være en non-broken chain i dine objekter (dvs. samme bruger der hele vejen igennem har oprettet de objekter der benyttes)
Jamen, har du også sikret dig at de(n) bruger(e) der har oprettet de stored procedures du har problemer med ALLE har været med i dbo (DataBase Owner) ??? Hvis ikke, opstår problemet pga. en broken object chain, hvilket så godt som ikke kan løses med SP\'s...
Har du prøvet at EXEC din_sp som administrator af SQL Serveren ?? (og derved sikkert dbo)
Oprettet en database, kald denne DB! Oprettet to logins (L1 og L2) der begger har rettigheder som Database Owner i DB. L1 har oprettet alle Tabeller og Stored Procedures i DB. L1 og L2 er oprettet som User i DB!!
Jeg har prøvet at give L2 Execute rettigheder for en stored procedure men for stadigvæk besked på at denne ikke findes??? Det løses ved at L2 oprette den pågældende stored procedure hvilket jeg ikke er interesseret i!
Det lyder virkeligt skummelt... hvis L1 er dbo i DB og L1 har oprettet både entiteter og Stored Procedures, burde L1 også uden problemer kunne give L2 rettigheder til din SP.
Tjek lige en gang til om L1 er med i db_owner fixed database role...
Hvis det er i orden, så åben query analyzer i master databasen og udfør dette script:
USE DB GO GRANT L2 EXECUTE ON GetThisAndThat GO
(udskift selvfølgelig L2, GetThisAndThat samt DB med de korrekte betegnelser)
USE TimeIT3 GO GRANT EXECUTE ON CheckPassword TO TimeIT GO
Skrives der
The command(s) completed successfully.
og jeg kan også se at TimeIT login\'et har fået retighed til at ekskveres den stored procedure CheckPassword ved at gå ind i den stored procedure og vælge Permissions!
Her er der sat Hak ud for EXEC!!
Alligevel siger SQL serveren at den stored procedure ikke findes!
Huh ??... Dvs. i query analyzeren godkendes scriptet uden fejl, nå du tildeler rettigheder ?? Og i Enterprise Manageren kan du se at rettighederne er tildelt korrekt ?? Men når du prøver at eksekvere din SP fejler den med en besked om at den ikke findes ??? Hmm... hvor og hvordan eksekverer du din SP ??
\'Set Type of call -> Stored Procedure call Command.CommandType = adCmdStoredProc \'Set name of stored procedure Command.CommandText = ProcName \'Get the Parameters Command.Parameters.Refresh
\'The return value is not counted as a parameter If (Command.Parameters.Count - 1 <> NumOfParams) Then MakeErr ErrorNumbers_WrongNumberOfParam, \"TimeITDBO::iRecordSet.CallStoredProcedure\", , \"in \" & CStr(ProcName) Else \'If (NumOfParams = 1) Then \' Command.Parameters(1) = Parameters \'ElseIf NumOfParams > 1 Then For i = LBound(Parameters) To UBound(Parameters) \'Skip the Return parameter in Stored Procedure \'Therefor + 1 in the Command.Parameters Command.Parameters(i + 1).Value = Parameters(i) Command.Parameters(i + 1).Direction = adParamInput Next i \'End If
Command.CommandTimeout = 0 If (m_AsyncMode) Then Command.Execute , , adAsyncExecute Else On Error Resume Next Set m_SyncRecordSet = Command.Execute(, , adCmdStoredProc) Err.Clear \'On Error GoTo ErrHandl: End If
Så stiv er jeg desværre ikke lige til VB, men prøv lige at se om den virker i SQL Servers query manager, hvis den virker der (med L2 brugeren) skal problemet findes i VB.
Det var faktisk ikke meningen at du skulle have de point før jeg var klar på om jeg havde fundet en løsning! Men sådan går det jo når man er fumlefingret! *GGG*
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.