In regards to the project I was asking question about, the night
before last I had a chance to sit down and spend some more time with my
client, and we worked out what I think is the best solution all around.  But
first I wanted to give you a little background on this contract and the much
larger application mine has to work with.  As I work on my own and don't
have contacts locally with whom I can discuss things such as this, I welcome
all comments, ideas, or even war stories this may bring to mind.
        This guy runs a business which catalogs and makes available for use
under a variety of contracts, images and video clips.  A few years back I
wrote a catalog application for his local network that allows them to scan
in display copies with proof-marks so they couldn't be used directly, but
provided him with a way of quickly putting together presentation mock-ups of
the photo work done by himself as well as sub-contractors all over the
state.          These "presentations" or sub-catalogs that he uses to sell
imagery are geared to the specific needs of his buyers, based both on his
experience with them and/or special requests for whatever they're looking
for at the moment.   The catalogs can be sent as hard copy or as digital
media, and for certain clients he even makes then available via a secure
site on the net.
        He now has a much more sophisticated catalog system which was put
together for him by a large firm in the Erie area, but he gave me the
contract to again write an app for his employees that allows them to access
the catalog images and use them in a variety of projects they put together
for him like magazine mock-ups, and other pre-sale presentations of all
kinds.
        Security IS indeed a problem that must be considered, but luckily
the imagery can only be viewed thru my application, and it will only reside
on 6 machines, none of which are accessible from his main local network or
on-line sources. His main concern is that up to 6 different users can logon
to EACH of these machines, one at any time at each machine of course, and
when they are working with the main catalog or even a subset of it, they
often times must copy content into their own work directories where no other
user that has access to the same machine should also ever be allowed to
access.  Each of them have the rights to access the catalog(s), but in order
to copy any content out and into their own directories, they must go thru a
check-out system that will be part of my application and which logs for who,
when, what, how long, and for what project the content was taken for.  The
app logs all this information and will auto-delete any copies still left on
these user machines after the amount of time they were checked out for is
up. Naturally this will have to give the user warning and the ability to
update the checkout for a longer time, but it is needed to ensure the blobs
don't get filled up with data left over or forgotten about.
        Now I don't know who sold him on the idea, but when he upgraded to
Vista, he did so with the impression its UAC made it impossible for any user
to access another's directories.  Unfortunately they forgot to tell him that
this only works for users with restricted access rights in the first place,
and all of his users have full control privileges because it's required by
the Catalog software originally written for Win2000.  This is just one of
the reasons I'm using an embedded dB to handle things at my end.  All
abilities of my app are controlled by and run from the application that
calls scripts encrypted and stored in the dB.  And even when images are
copied over from the main catalog, they cannot be copied to disk, but only
into each user's own set of dB files.  And each file is encrypted using a
different password made up and given to each user by the boss.  This way if
a user on a particular machine takes out an image to crop for a magazine ad,
the copy and all the work done is saved into the user's own dB file, and
even if another user finds a way to access the file itself, there's no way
for him or her to open the file up!  Also, the scripts that are used have
all be written by one person and control the type of access required by the
operation being done.  For example, if a page mock-up is being put together,
and the user needs the image only to act as a placeholder so that
typesetting can be done around it, a full copy will not be pulled out of the
catalog.  Instead a shadow copy will be made and it used!  The scripts each
user employs has to be run directly from a control table in their own dB
File as well.  This way no one else can make changes to the scripts that
another uses.  And all 3rd party graphics apps that they use for
manipulation and page setup are crippled so that files cannot even be saved
to disk unless they already reside on the disk.  
        If you wonder why so much attention would be given to creating this
kind of security for employees, I can tell you that some of the images they
lease for their catalog, made by guys like Duane Michaels and Helmut Newton,
cost this guy almost $5,000 a month!  And my client's insurance and bonding
companies had to okay the specs as well as the finished apps involved!  They
don't require high levels of encryption, but they do demand certain levels
of logging and in-house protection.
        In any case I solved the problem that initiated this thread I
believe.  It's handled on three separate levels.  The first is in the blob
encryption that is applied to individual record items, the next is in the
encryption of the entire dB File on a page by page basis, and the last is
provided by each user having to have given them their own encrypted access
to their account, the application and the main catalog.  The way around the
speed compromise that I didn't want to make will now be handled by using
in-memory tables that are loaded as the original file is decrypted.  I had
to split things up a bit differently however because initial tests showed
that under average conditions, a user will have up to 400 mb loaded for one
original image, and again half that amount for B/W low-res copies that might
be used as placemats in presentation mockups.  Add to that the script tables
which hold almost 600 mb of data, and color swatches and typesetting data
and it could add up to over 1500 mb!  I've set the in-memory tables to only
be used for the actual images, because they take the longest to decrypt and
load, but I'm looking for a good, inexpensive tool that I can use to log
every command/action and the time they take made by a user from within my
application.  I think by having such information on hand, I can better
"tune" things, especially the way I set my individual tables up.  If anyone
knows a good product for doing this kind of thing, please let me know about
it.
        Right now, all of this is still only on paper, except for a few
small pieces I've put together over the last 4 years that led to this
contract.  And I know I'm only getting it because the guy is a good friend
of mine and I'm working for starvation wages plus expenses! <g>  But I don't
mind because it's one of the most interesting projects I've yet to work on,
allowing me to learn a lot of new areas that I might otherwise never get the
opportunity to try my hand at.  Also there's really nothing beyond my
technical understanding involved in this project.  It's all really basic
stuff, being for the most part a logistics control exercise!
        Anyway, I hope I didn't bore anyone.  And I also hope others will
take the time to write about some of the more interesting things they get
involved with themselves as programmers.  
           

from Robert Meek dba "Tangentals Design"
e-mail: [EMAIL PROTECTED]
Freelance Windows Programming for XP and Vista 
Also proud to be a Moderator of the "Delphi-List" at elists.org

"Reality cannot be explained...only enjoyed or endured as your current
perspective allows!"


__________________________________________________
Delphi-Talk mailing list -> Delphi-Talk@elists.org
http://www.elists.org/mailman/listinfo/delphi-talk

Reply via email to