Secure Database Systems

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Sarah Tanembaum

    Secure Database Systems

    I was wondering if it is possible to create a secure database system
    using RDBMS(MySQL, Oracle, SQL*Server, PostgreSQL etc) and web
    scripting/programming language(Perl, PHP, Ruby, Java, ASP, etc) combination?

    I have the following in mind:

    I wanted to store all my( and my brothers and sisters) important
    document
    information such as birth certificate, SSN, passport number, travel
    documents, insurance(car, home, etc) document, and other important
    documents
    imagined in the database.

    The data will be entered either manually and/or scanned(with OCR). I
    need to
    be able to search on all the fields in the database.

    We have 10 computers(5bros , 4sisters, and myself) plus 1 server with I
    maintained. The data should be synchronize/replicate between those
    computers.

    Well, so far it is easy, isn't it?

    Here's my question:

    a) How can I make sure that it secure so only authorized person can
    modify/add/delete the information? Beside transaction logs, are there
    any
    other method to trace any transaction(kin d of paper trail)?

    Assuming there are 3 step process to one enter the info e.g:
    - One who enter the info (me)
    - One who verify the info(the owner of info)
    - One who verify and then commit the change!
    How can I implement such a process in RDBMS and/or PHP or any other web
    language?

    b) How can I make sure that no one can tap the info while we are
    entering
    the data in the computer? (our family are scattered within US and
    Canada)

    c) Is it possible to securely synchronize/replicate between our
    computers
    using VPN? Does RDBMS has this functionality by default?

    d) Other secure method that I have not yet mentioned.

    Anyone has good ideas on how to implement such a systems?

    Thanks



  • Colin McKinnon

    #2
    Re: Secure Database Systems

    Sarah Tanembaum wrote:
    [color=blue]
    > I was wondering if it is possible to create a secure database system
    > using RDBMS(MySQL, Oracle, SQL*Server, PostgreSQL etc) and web
    > scripting/programming language(Perl, PHP, Ruby, Java, ASP, etc)
    > combination?
    >[/color]

    Within the scope of your requirements,

    Yes.

    It should have nothing to do with the language you use, just the DBMS. To
    explain how to do it would take much longer than is polite to post to a
    single newsgroup let alone 6, and the fact that you're asking the question
    rather suggests you would be struggling to understand the answer.

    Briefly, all the DBMS you've mentioned provide access controls. Using a
    distributed database is rather more complex and not supported by all the
    products. Managing a distributed system can be tricky - consider using a
    master db with replication to read-only slaves.

    The best technologies are the ones that will be the least struggle for you -
    what do you know already? How much help can you get? What does the person
    sitting next to you know?

    HTH

    C.

    Comment

    • Matthias Scheller

      #3
      Re: Secure Database Systems

      Sarah Tanembaum schrieb:[color=blue]
      > I was wondering if it is possible to create a secure database system
      > using RDBMS(MySQL, Oracle, SQL*Server, PostgreSQL etc) and web
      > scripting/programming language(Perl, PHP, Ruby, Java, ASP, etc) combination?
      >
      > I have the following in mind:
      >
      > I wanted to store all my( and my brothers and sisters) important
      > document
      > information such as birth certificate, SSN, passport number, travel
      > documents, insurance(car, home, etc) document, and other important
      > documents
      > imagined in the database.[/color]

      Store the information in a filesystem (accessible via https://), the
      metainformation (catalogue) in a database which delivers as result a
      link (for example a weblink). The link may be a script which delivers
      the actual content (use include() in php) after checking the authorization
      [color=blue]
      >
      > The data will be entered either manually and/or scanned(with OCR). I
      > need to
      > be able to search on all the fields in the database.[/color]
      [color=blue]
      >
      > We have 10 computers(5bros , 4sisters, and myself) plus 1 server with I
      > maintained. The data should be synchronize/replicate between those
      > computers.
      >
      > Well, so far it is easy, isn't it?
      >
      > Here's my question:
      >
      > a) How can I make sure that it secure so only authorized person can
      > modify/add/delete the information? Beside transaction logs, are there
      > any
      > other method to trace any transaction(kin d of paper trail)?[/color]

      If you are going to replicate between several databases, any member of
      the family may have access to all data (if they are able), so I suppose
      transaction is more an informal process (Who has added information in
      case of further questions ?)
      [color=blue]
      >
      > Assuming there are 3 step process to one enter the info e.g:
      > - One who enter the info (me)
      > - One who verify the info(the owner of info)
      > - One who verify and then commit the change!
      > How can I implement such a process in RDBMS and/or PHP or any other web
      > language?[/color]

      The problem is again, that the one person who administrates the whole
      lot could do anything she / he liked. Normally, secret sharing uses the
      fact, that a system of equations is defined by exactly the amount of its
      variables.
      [color=blue]
      >
      > b) How can I make sure that no one can tap the info while we are
      > entering
      > the data in the computer? (our family are scattered within US and
      > Canada)[/color]

      Search the web for secure copy, secure socket layer (SSL) etc.
      [color=blue]
      >
      > c) Is it possible to securely synchronize/replicate between our
      > computers
      > using VPN? Does RDBMS has this functionality by default?[/color]

      VPN just gives you the same thing as if in a phone network, everyone
      would have the same number range while living at different places.

      Look after IPSEC
      [color=blue]
      >
      > d) Other secure method that I have not yet mentioned.
      >
      > Anyone has good ideas on how to implement such a systems?[/color]

      a lot of time will help...
      [color=blue]
      >
      > Thanks
      >
      >
      >[/color]

      Comment

      • Randy Lawrence

        #4
        Re: Secure Database Systems

        Sarah Tanembaum wrote:[color=blue]
        > I was wondering if it is possible to create a secure database system
        > using RDBMS(MySQL, Oracle, SQL*Server, PostgreSQL etc) and web
        > scripting/programming language(Perl, PHP, Ruby, Java, ASP, etc) combination?
        >
        > I have the following in mind:
        >
        > I wanted to store all my( and my brothers and sisters) important
        > document
        > information such as birth certificate, SSN, passport number, travel
        > documents, insurance(car, home, etc) document, and other important
        > documents
        > imagined in the database.
        >
        > The data will be entered either manually and/or scanned(with OCR). I
        > need to
        > be able to search on all the fields in the database.
        >
        > We have 10 computers(5bros , 4sisters, and myself) plus 1 server with I
        > maintained. The data should be synchronize/replicate between those
        > computers.
        >
        > Well, so far it is easy, isn't it?
        >
        > Here's my question:
        >
        > a) How can I make sure that it secure so only authorized person can
        > modify/add/delete the information? Beside transaction logs, are there
        > any
        > other method to trace any transaction(kin d of paper trail)?
        >
        > Assuming there are 3 step process to one enter the info e.g:
        > - One who enter the info (me)
        > - One who verify the info(the owner of info)
        > - One who verify and then commit the change!
        > How can I implement such a process in RDBMS and/or PHP or any other web
        > language?
        >
        > b) How can I make sure that no one can tap the info while we are
        > entering
        > the data in the computer? (our family are scattered within US and
        > Canada)
        >
        > c) Is it possible to securely synchronize/replicate between our
        > computers
        > using VPN? Does RDBMS has this functionality by default?
        >
        > d) Other secure method that I have not yet mentioned.
        >
        > Anyone has good ideas on how to implement such a systems?
        >
        > Thanks
        >
        >
        >[/color]

        Some suggestions:

        1. Use 2-factor authentication. So if a password gets stolen, it isn't
        enough by itself to access data.

        2. Use 128-bit encryption for storage using secure algorithm (blowfish,
        twofish or AES.

        3. Use 128-bit encryption for communication.

        4. Use secure key exchange protocols.

        5. Use secure key generation algorithm.

        6. Use digital signatures and public-key encryption where appropriate.
        Client should authenticate server and server should authenticate
        client to eliminate man-in-the-middle attacks.

        7. Take a look at Groove.net products to see how they designed their
        secure p2p shared-workspace applications.

        8. Use firewalls to restrict access to communication ports based on IP
        addresses or range of addresses or ip countries. Why allow access from
        Chinese or Russian IP addresses if all your family members are in USA? ;)

        IMHO, the openssl interface in Ruby 1.8.1-snapshot makes this fairly
        easy to do compared to other scripting languages.

        Comment

        • Randy Lawrence

          #5
          Re: Secure Database Systems

          Sarah Tanembaum wrote:
          [color=blue]
          > I was wondering if it is possible to create a secure database system
          > using RDBMS(MySQL, Oracle, SQL*Server, PostgreSQL etc) and web
          > scripting/programming language(Perl, PHP, Ruby, Java, ASP, etc) combination?
          >
          > I have the following in mind:
          >
          > I wanted to store all my( and my brothers and sisters) important
          > document
          > information such as birth certificate, SSN, passport number, travel
          > documents, insurance(car, home, etc) document, and other important
          > documents
          > imagined in the database.
          >
          > The data will be entered either manually and/or scanned(with OCR). I
          > need to
          > be able to search on all the fields in the database.
          >
          > We have 10 computers(5bros , 4sisters, and myself) plus 1 server with I
          > maintained. The data should be synchronize/replicate between those
          > computers.
          >
          > Well, so far it is easy, isn't it?
          >
          > Here's my question:
          >
          > a) How can I make sure that it secure so only authorized person can
          > modify/add/delete the information? Beside transaction logs, are there
          > any
          > other method to trace any transaction(kin d of paper trail)?
          >
          > Assuming there are 3 step process to one enter the info e.g:
          > - One who enter the info (me)
          > - One who verify the info(the owner of info)
          > - One who verify and then commit the change!
          > How can I implement such a process in RDBMS and/or PHP or any other web
          > language?
          >
          > b) How can I make sure that no one can tap the info while we are
          > entering
          > the data in the computer? (our family are scattered within US and
          > Canada)
          >
          > c) Is it possible to securely synchronize/replicate between our
          > computers
          > using VPN? Does RDBMS has this functionality by default?
          >
          > d) Other secure method that I have not yet mentioned.
          >
          > Anyone has good ideas on how to implement such a systems?
          >
          > Thanks
          >
          >
          >[/color]

          One more thing...ssh tunneling is your best friend. If the
          communication protocols available in your RDBMS server or client aren't
          sufficiently secure, simply using SSH tunneling.

          Comment

          • Gordon Burditt

            #6
            Re: Secure Database Systems

            >I was wondering if it is possible to create a secure database system[color=blue]
            >using RDBMS(MySQL, Oracle, SQL*Server, PostgreSQL etc) and web
            >scripting/programming language(Perl, PHP, Ruby, Java, ASP, etc) combination?[/color]

            It depends on how you define 'secure' and what your security policy
            is. For example, MySQL allows database connections to be encrypted
            with SSL. I suspect that some of the others do also. Also, most
            web servers can be set up in a configuration that supports https.
            And pretty much every web browser supports https.
            [color=blue]
            >I have the following in mind:
            >
            >I wanted to store all my( and my brothers and sisters) important
            >document
            >information such as birth certificate, SSN, passport number, travel
            >documents, insurance(car, home, etc) document, and other important
            >documents
            >imagined in the database.[/color]

            Why is this not several SEPARATE databases?
            [color=blue]
            >The data will be entered either manually and/or scanned(with OCR). I
            >need to
            >be able to search on all the fields in the database.[/color]

            Do you actually have a program that does decent OCR of handwriting,
            starting from images? It would be useful to be able to take a bunch
            of scanned cancelled checks and search for, say, "Auto insurance"
            (a comment I'd probably write on the memo line of the check).

            It is very difficult to get anything useful out of searching images
            stored as binary blobs in a database table.
            [color=blue]
            >We have 10 computers(5bros , 4sisters, and myself) plus 1 server with I
            >maintained. The data should be synchronize/replicate between those
            >computers.[/color]

            MySQL allows replication between different servers, again with SSL
            for the replication connection. Generally, though, changes need to
            be entered at the master.
            [color=blue]
            >Well, so far it is easy, isn't it?
            >
            >Here's my question:
            >
            >a) How can I make sure that it secure so only authorized person can
            >modify/add/delete the information? Beside transaction logs, are there
            >any
            >other method to trace any transaction(kin d of paper trail)?[/color]

            Who's an authorized person?
            At what granularity do you need the access controls? For example,
            MySQL has access controls on individual table columns, so a specific
            person (database login) may be allowed read-write, read, or no
            access to the 'SSN' column. However, I do not believe it has any
            kind of access restrictions that would allow one to read and alter
            the SSN in THEIR OWN RECORD ONLY. If you put each person's data
            in different tables, or different databases, that would make access
            control better, but it makes it harder to search for things like
            "whose wills are kept by <name of attorney>"?

            It is possible for PHP to access the data using its own database
            login (for which it will likely have near-full privileges), and let
            the PHP code enforce restrictions like "a user may see only his own
            SSN". PHP would have its own set of web users (with their own
            passwords, privileges, etc. enforced by PHP but with the info kept
            in the database). This does mean, however, that anyone with PHP's
            database login gets to see all the data. It also means that the
            PHP code that enforces the security rules could leak information
            if the security policy is not implemented correctly. And implementing
            all that PHP code CORRECTLY takes work.

            A suggestion for your PHP web pages: log the time, date, IP address
            the request came from, user name (or other form identifying the
            requester), whether the password was correct (log the bad attempts
            too!), what they accessed, and what they changed, and what the old
            values of the changed fields were.

            MySQL has query logs (however, if there is one database user, PHP,
            for all the web page users, it will not log which query was made
            on behalf of who). Your PHP application can log what screens who
            viewed and what changes were entered. This takes WORK. PHP will
            not do all that logging itself automatically.

            [color=blue]
            >Assuming there are 3 step process to one enter the info e.g:
            >- One who enter the info (me)[/color]

            Now, right here, you've got a security problem. You see all the data.
            And you shouldn't.
            [color=blue]
            >- One who verify the info(the owner of info)
            >- One who verify and then commit the change![/color]

            For a multi-step process like this you need some place in the database
            to store pending changes. What is your access policy for THOSE?
            Can I, who entered the data, see the data I entered while it is waiting
            for the owner of the data to approve it?
            [color=blue]
            >How can I implement such a process in RDBMS and/or PHP or any other web
            >language?
            >
            >b) How can I make sure that no one can tap the info while we are
            >entering
            >the data in the computer? (our family are scattered within US and
            >Canada)[/color]

            Use SSL web pages (https). SSL between the web server and the
            database matters less if the web server and the database are on the
            same machine or on a local LAN, and direct access to the database
            is not allowed except on the same machine or within the local LAN.
            But SSL between the web server and various users' browsers all over
            the continent is a must. Even if you use a VPN, browsers tend to
            take better care of SSL data (like not leaving it around in a cache).
            [color=blue]
            >c) Is it possible to securely synchronize/replicate between our
            >computers
            >using VPN? Does RDBMS has this functionality by default?[/color]

            VPN is typically not a feature of a RDBMS (neither is "wireless
            802.11g", or DSL, or IP over Avian Carriers - a RDBMS typically
            runs over IP, and a VPN uses some means to transport IP securely).
            A RDBMS that can replicate over the net should be able to transparently
            replicate over a VPN if you set up the VPN to encrypt all traffic.
            There is nothing inherently wrong with using multiple security
            layers (e.g. https over IPSEC over SSH tunnel over WEP-enabled
            802.11g, although this is a bit extreme) unless the overhead just
            gets to be unacceptable.

            MySQL supports replication over a SSL database connection, by itself
            without needing to install a VPN. (Having both is not an unreasonable
            choice, though).

            Is there a need for users of this database to access data on the
            road, away from their VPNs? For example, several family members
            are on a trip, there's an accident, and one of them urgently needs
            medical history information for one of the others.

            [color=blue]
            >d) Other secure method that I have not yet mentioned.[/color]

            Another thing to think of is encrypting data *IN* the database, and
            if you do that, how you manage keys. Presumably some of this info
            is being kept to ensure that it is available if the owner of the
            data dies, which may make this option less desirable.
            [color=blue]
            >Anyone has good ideas on how to implement such a systems?[/color]

            First, you need to decide on your security policy (especially the part about
            legitimate users snooping on other legitimate users data). You also need to
            decide what functions are needed. A RDBMS can generally "search on anything"
            but a web page, unless it lets you enter an arbitrary SQL query, usually doesn't.

            Gordon L. Burditt

            Comment

            • Michael Austin

              #7
              Re: Secure Database Systems

              Sarah Tanembaum wrote:[color=blue]
              > I was wondering if it is possible to create a secure database system
              > using RDBMS(MySQL, Oracle, SQL*Server, PostgreSQL etc) and web
              > scripting/programming language(Perl, PHP, Ruby, Java, ASP, etc) combination?
              >
              > I have the following in mind:
              >
              > I wanted to store all my( and my brothers and sisters) important
              > document
              > information such as birth certificate, SSN, passport number, travel
              > documents, insurance(car, home, etc) document, and other important
              > documents
              > imagined in the database.[/color]


              they are actually going to allow you to do this?? I certainly
              wouldn't... because if you didn't do it right, all of you would be
              subject to identity theft.

              <snippage>

              Michael Austin.

              Comment

              Working...