Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Safe and DBI

by tetromino (Initiate)
on Apr 19, 2005 at 22:02 UTC ( [id://449441]=perlquestion: print w/replies, xml ) Need Help??

tetromino has asked for the wisdom of the Perl Monks concerning the following question:

I am trying to use DBI (DBD::SQLite) inside a Safe compartment, but I can't figure out a way to do it. My initial approach was to create a connection in the main program, then write a function to call do() etc. on that connection, and finally to share() the function into the safe compartment. Doesn't work:
$dbh = DBI->connect(...); sub foo { $dbh->do(...); } $compartment = new Safe; $compartment->share('&foo'); $compartment->reval('&foo();');
produces

Had to create DBI::_dbistate unexpectedly at ./mrmonitor.pl line 232.

and the program freezes.

So I tried creating a new connection inside the compartment:
sub foo { my $dbh = DBI->connect(...); $dbh->do(...); $dbh->disconnect(); }
and I get

Can't locate object method "connect" via package "DBI" (perhaps you forgot to load "DBI"?) at ./mrmonitor.pl line 228.

I could add "DBI::connect" (and a bunch of other DBI/DBD methods) to the compartment -- but that would defeat the entire purpose of a Safe compartment, because it would let user code access databases however it feels like.

Is there a solution to this problem, or should I just not use Safe in this case?

Replies are listed 'Best First'.
Re: Safe and DBI
by djantzen (Priest) on Apr 19, 2005 at 22:15 UTC

    How about a wrapper method around DBI::connect to restrict access to the database? You'd have that utility method and possibly others accessible in the Safe compartment but the core DBI methods would remain uncallable.

Re: Safe and DBI
by Joost (Canon) on Apr 19, 2005 at 22:11 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://449441]
Approved by Joost
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (8)
As of 2024-04-23 11:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found