Ik ben een beetje aan het spelen met Application Roles in SQL Server en ASP.NET, maar het wil niet zo goed werken.
Ik heb dus een Sql Server databank, met een aantal tabellen en stored procedures.
Ik heb de rechten zo ingesteld dat er niemand rechten heeft op de tabellen, en dat alle toegang via stored procedures verloopt. Dat loopt perfect, ik kan de SP's uitvoeren om de inhoud van de tabellen te zien etc....
Nu wilde ik nog een stap verder gaan: ik wil dat niemand rechtstreeks toegang heeft tot de DB, en dat alle toegang moet verlopen via een applicatie.
Ik heb dan dus alle toegang (uitvoerrechten) ontkent voor alle SP's. Je kan dus nu niet zomaar een SP gaan uitvoeren.
Vervolgens heb ik een application role gemaakt in SQL Server, die de toegangsrechten controleert:
Ik heb execute rechten toegekend op m'n stored procedures aan die application role:
Tot daar geen probleem.
Als ik nu in Query Analyzer de Application Role actief wil maken, dan lukt dat ook:
Dit lukt ook: ik krijg de melding: 'The application role libapp is now active'.
Echter, wil ik nu vanaf een ASP.NET site toegang krijgen tot m'n db dan loopt het mis.
Een application role is geldig voor de duur van een connectie, dus ik heb bv volgende code:
Dan loopt het mis op de regel: daSearch.Fill.
Ik krijg een security-exception dat ik geen toegang heb op de procedure LIB_SEARCHCONTACTS.
Dit is zeer vreemd, want ik ben zeker dat ik de toegang verleend heb aan de application-role, en ik heb ook de application-role actief gemaakt. (Zie de cmdAppRole Command). Daar krijg ik geen fout op, dus ik vermoed dat dit goed gaat.
Heeft er iemand een ideetje aan wat het zou kunnen liggen, of heeft er al iemand anders ervaring met application-roles in sql-server en web-apps in ASP.NET en daar al succesvol mee getest?
Ik heb dus een Sql Server databank, met een aantal tabellen en stored procedures.
Ik heb de rechten zo ingesteld dat er niemand rechten heeft op de tabellen, en dat alle toegang via stored procedures verloopt. Dat loopt perfect, ik kan de SP's uitvoeren om de inhoud van de tabellen te zien etc....
Nu wilde ik nog een stap verder gaan: ik wil dat niemand rechtstreeks toegang heeft tot de DB, en dat alle toegang moet verlopen via een applicatie.
Ik heb dan dus alle toegang (uitvoerrechten) ontkent voor alle SP's. Je kan dus nu niet zomaar een SP gaan uitvoeren.
Vervolgens heb ik een application role gemaakt in SQL Server, die de toegangsrechten controleert:
code:
1
| sp_addapprole 'libapp', 'test' |
Ik heb execute rechten toegekend op m'n stored procedures aan die application role:
code:
1
| GRANT EXECUTE on LIB_GETUSERS TO libapp |
Tot daar geen probleem.
Als ik nu in Query Analyzer de Application Role actief wil maken, dan lukt dat ook:
code:
1
| sp_setapprole 'libapp', 'test |
Dit lukt ook: ik krijg de melding: 'The application role libapp is now active'.
Echter, wil ik nu vanaf een ASP.NET site toegang krijgen tot m'n db dan loopt het mis.
Een application role is geldig voor de duur van een connectie, dus ik heb bv volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| conn = new SqlConnection (connectionString);
conn.Open();
SqlCommand cmdAppRole = new SqlCommand();
cmdAppRole.CommandType = CommandType.StoredProcedure;
cmdAppRole.Connection = conn;
cmdAppRole.CommandText = "sp_setapprole";
cmdAppRole.Parameters.Add ("@rolename", "libapp");
cmdAppRole.Parameters.Add ("@password", "test");
cmdAppRole.ExecuteNonQuery();
cmdSearch = new SqlCommand();
cmdSearch.Connection = conn;
cmdSearch.CommandType = CommandType.StoredProcedure;
cmdSearch.CommandText = "LIB_SEARCHCONTACTS";
...
daSearch.Fill (dsContacts); |
Dan loopt het mis op de regel: daSearch.Fill.
Ik krijg een security-exception dat ik geen toegang heb op de procedure LIB_SEARCHCONTACTS.
Dit is zeer vreemd, want ik ben zeker dat ik de toegang verleend heb aan de application-role, en ik heb ook de application-role actief gemaakt. (Zie de cmdAppRole Command). Daar krijg ik geen fout op, dus ik vermoed dat dit goed gaat.
Heeft er iemand een ideetje aan wat het zou kunnen liggen, of heeft er al iemand anders ervaring met application-roles in sql-server en web-apps in ASP.NET en daar al succesvol mee getest?
https://fgheysels.github.io/