[Access2k] Instructie "Grant"

Pagina: 1
Acties:

  • Stefke
  • Registratie: December 2000
  • Laatst online: 22-08 11:19
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
GRANT (Instructie)
Met deze instructie verleent u specifieke machtigingen aan een bestaande gebruiker of groep.

Syntaxis
GRANT {machtiging[, machtiging, …]} ON
    {TABLE tabel |    
    OBJECT object|

CONTAINER container } TO {machtigingnaam[, machtigingnaam, …]}


--------------------------------------------------------------------------------

De instructie GRANT bevat de volgende onderdelen:

Onderdeel Beschrijving 
machtiging De machtiging of machtigingen die worden verleend.
Machtigingen geeft u op met de volgende sleutelwoorden: 
SELECT, DELETE, INSERT, UPDATE, DROP, SELECTSECURITY, UPDATESECURITY, 
DBPASSWORD, UPDATEIDENTITY, CREATE, SELECTSCHEMA, SCHEMA en UPDATEOWNER.
 
tabelnaam - Elke geldige tabelnaam. 
object - Elk object dat geen tabel is. Een voorbeeld is een opgeslagen query (weergave of procedure). 
container - De naam van een geldige container. 
machtigingnaam - De naam van een gebruiker of groep.


Met deze instructie moet het mogelijk zijn om vanuit VBA userrechten van users in je werkgroepbestand te wijzigen.

Er staat echter niets bij over hoe en waar je deze instructie moet gebruiken, en ik ben een beetje uit Access geraakt. De helpfile van Access2k geeft niet meer informatie dan wat hier staat, de helpfile van Access97 gaf veel meer (voorbeelden, uitleg) maar Access97 kent deze instructie niet.

Wie kan mij vertellen hoe ik dit moet gebruiken?


Wat ik wil maken is dat een gebruiker die inlogt voor heel even toegang krijgt tot een tabel en die toegang moet daarna weer afgesloten worden.
Dit om te voorkomen dat gebruikers bepaalde informatie lezen die ze niet mogen lezen, en die door de code gebruikt wordt voor bepaalde zaken.

[ Voor 11% gewijzigd door Stefke op 27-05-2003 11:12 ]


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22-08 10:45

mulder

ik spuug op het trottoir

Dit is dacht ik SQL, geen VBA.

oogjes open, snaveltjes dicht


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
De GRANT instructie is een SQL instructie.

Je kunt ze vanuit VBA uitvoeren net zoals je andere SQL commando's (INSERT, UPDATE, ...) vanuit VBA uitvoert

https://fgheysels.github.io/


  • Stefke
  • Registratie: December 2000
  • Laatst online: 22-08 11:19
Met Docmd.RunSQL dus dan?

Edit: nee, volgens mij moet je die anders aanspreken

[ Voor 72% gewijzigd door Stefke op 27-05-2003 13:13 ]


  • Stefke
  • Registratie: December 2000
  • Laatst online: 22-08 11:19
Nog iemand die me kan vertellen hoe ik zon SQL instructie ook weer moet maken?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 18-08 22:57

Gerco

Professional Newbie

CurrentDB.Execute "SQL"

Als ik me niet vergis.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Stefke
  • Registratie: December 2000
  • Laatst online: 22-08 11:19
die ken ik ook nog uit een ver verleden, eens effe proberen :)

Edit: ik krijg dezelfde foutmelding als bij de bovenstaande

code:
1
Er is een ongeldige SQL-instructie gevonden. Delete, Insert, Procedure etc etc werd verwacht (fout 3129)


Andere mogelijkheden?

[ Voor 63% gewijzigd door Stefke op 02-06-2003 13:36 ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21:31
Hmm, GRANT is een onderdeel van de DDL van de Jet SQL engine. Die wordt volgens mij door ADOX geleverd.

Hen je deze gereferenced ?
Kan het zijn dat je een provider gebruikt die deze instructies niet begrijpt ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Stefke
  • Registratie: December 2000
  • Laatst online: 22-08 11:19
ehm he? :?

Ik kon een jaar geleden redelijk overweg met VBA en access, maar dat is nogal verwaterd en ik heb geen idee waar je het over hebt, gaat me net te ver.

Het kan zijn dat de installatie van access hier niet zo geweldig is, maar dat weet ik zo niet

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21:31
:)

Naast het standaard ADO component ( MS ActiveX Data Objects X.X ) kun je in een VBA project ook de ADOX ( MS ADO Ext. X.X for DDL and Security ) toevoegen.

Deze heeft de objecten aan boord waarmee je die DDL acties die jij wil kan doen. Ik weet echter niet of ze ook nodig zijn als je die SQL instructies direct uitvoert, zoals je hierboven hebt aangegeven.

Ik zal wel ff proberen ..

Met deze code vanuit een VB project krijg ik een foutmelding dat het systeem mijn 'workgroup information file' niet kan vinden.

Nou weet ik weer niet wat dat is, maar de query lijkt hij wel te begrijpen. :)

Ik heb overigens niet die ADOX referentie aan mijn project toegevoegd.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Public Sub Main()

 Dim c As ADODB.Connection
 
 
 Set c = New ADODB.Connection
 
 
 Call c.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\weighing.mdb")
 
 
 Dim strSQL As String
 
 strSQL = "GRANT SELECT ON TABLE [tblUnitSets] TO Admin"
 
 c.Execute strSQL
 
 c.Close
 
End Sub



En Vanuit de VB editor in Access 2k krijg ik helemaal geen fout :)

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub blaat()

On Error GoTo ErrorHandler

CurrentProject.Connection.Execute ("GRANT SELECT ON TABLE [tblUnitSets] TO Admin")

Exit Sub

ErrorHandler:

Debug.Print Err.Description

End Sub

[ Voor 15% gewijzigd door farlane op 02-06-2003 16:56 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Wat ik wil maken is dat een gebruiker die inlogt voor heel even toegang krijgt tot een tabel en die toegang moet daarna weer afgesloten worden.
Dit om te voorkomen dat gebruikers bepaalde informatie lezen die ze niet mogen lezen, en die door de code gebruikt wordt voor bepaalde zaken.
Kan je niet gewoon een view (query) aanmaken die de benodigde gegevens beschikbaar maakt voor je applicatie? Op deze query kan je dan vaste leesrechten geven. De overige gegevens blijven zo afgeschermd voor de gebruikers.

Today's subliminal thought is:


  • Stefke
  • Registratie: December 2000
  • Laatst online: 22-08 11:19
niet dat ik weet. Conflicteren de rechten van zo+n query niet met de rechten van de onderliggende tabel? Ik zou het even moeten uitproberen

  • Stefke
  • Registratie: December 2000
  • Laatst online: 22-08 11:19
Dat werkt niet, zoals verwacht hebben gebruikers dan wel rechten om de query te lezen, maar niet de gegevens van de tabel waarop die query gebaseerd is

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21:31
Had je die code van mij al geprobeerd ? Wat waren je bevindingen ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Boss
  • Registratie: September 1999
  • Laatst online: 00:09

Boss

+1 Overgewaardeerd

Volgens mij kan je de rechten in Access niet met SQL instellen. Die commando's kent de SQL parser van Access gewoon niet en dan krijg je een fout.

Je kan wel met VBA code GROUPS en USERS aanpassen. Zoek maar eens in het objectenoverzicht op die termen.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • Stefke
  • Registratie: December 2000
  • Laatst online: 22-08 11:19
Heb die code nog niet geprobeerd, moet ik nog wel effe doen.

Hier heb ik nog iets anders gevonden:
Uitvoeringsrechten (RunPermissions), eigenschap


Met de eigenschap Uitvoeringsrechten (RunPermissions) kunt u in een omgeving met meerdere gebruikers in een beveiligde werkgroep de bestaande gebruikersmachtigingen vervangen. Hierdoor kunt u een query bekijken of een toevoeg-, verwijder-, tabelmaak- of bijwerkquery uitvoeren waarvoor u normaal geen machtiging hebt. Als gebruiker hebt u bijvoorbeeld alleen-lezen-machtiging voor query's, terwijl de eigenaar van de query's lees-/schrijfrechten heeft. Als de eigenaar de Uitvoeringsrechten (RunPermissions) instelt op de machtigingen van de eigenaar, kunt u een toevoegquery uitvoeren om records aan een tabel toe te voegen.

Instelling

De eigenschap Uitvoeringsrechten (RunPermissions) kent de volgende instellingen.

Instelling Beschrijving
Van eigenaar Aan alle gebruikers wordt dezelfde machtiging toegewezen als aan de eigenaar voor het bekijken of uitvoeren van de query.
Van gebruiker (Standaard) Gebruikers hebben alleen hun eigen machtiging om query's te bekijken of uit te voeren.


U kunt deze eigenschap instellen in het eigenschappenvenster van de query.

U kunt de eigenschap Uitvoeringsrechten (RunPermissions) ook instellen in de SQL-weergave van het queryvenster met behulp van de declaratie WITH OWNERACCESS OPTION in de SQL-instructie.
vb> SELECT Categorieën.Categorienummer, Categorieën.Categorienaam, Categorieën.Beschrijving FROM Categorieën WITH OWNERACCESS OPTION;

Dat laatste zou er voor moeten zorgen dat degene die de query uitvoert (de gebruiker) voor deze query dezelfde rechten krijgt als de eigenaar van de query (ik), effe proberen

Is te gebruiken als eigenschap instelling van de query of als toevoeging aan de query SQL

edit: dat werkt :) de normale gebruiker kan enkel dmv deze querie wel de gegevens uit de tabel lezen, terwijl de tabel zelf en de querieopbouw etc gesloten blijven.
En ik kan deze SQL query natuurlijk ook ook enkel in de code aanroepen, waardoor hij afgeschermd blijft van users (die geen rechten hebben om in de code te komen)


Die code van farlane ga ik ook nog proberen, want daarmee is het misschien mogelijk om binnen mijn accessprogramma een mogelijkheid te maken voor het beheren van bepaalde rechten door een "hogere" gebruiker, zonder dat die persoon daadwerkelijk in de database komt.


OVerigens had ik zelf dit al gefabriceerd een jaar terug:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Set WrkJet = DBEngine.CreateWorkspace("", "adminlogin",
                               "adminwachtwoord", dbUseJet)

' door de userpermissions voor de licentietabel voor users
ENKEL toegankelijk te maken via code wordt 100% beveiligd
Set dbs = CurrentDb 'WrkJet.OpenDatabase("C:\WK_backend.mdb")
Set CtrTble = dbs.Containers!Tables

For Each Doc In CtrTble.Documents
    If Doc.Name = "licentie" Then
        MsgBox "Licentie"
        If Not CurrentUser() = "adminlogin" Then
            MsgBox Doc.UserName
            Doc.UserName = CurrentUser()
            MsgBox Doc.UserName
            Doc.Permissions = dbSecRetrieveData
            MsgBox Doc.Permissions
        End If
    End If
Next Doc


Hiermee worden de rechten ingesteld voor tabellen, helaas is het zo dat als een normale user inlogt ik de melding krijg dat deze gebruiker niet gemachtigd is om rechten in te stellen, m.a.w. de code kan alleen de rechten wijzigen als de ingelogde gebruiker dat ook mag.
En als ik dat in de database instel heeft die gebruiker automatisch ook toegang tot de tabel (wat ik dus niet wil)

Anyway, de optie van de query werkt iig afdoende, wellicht dat ik de code van farlane in bredere zin kan toepassen.

[ Voor 49% gewijzigd door Stefke op 03-06-2003 12:30 ]

Pagina: 1