PEAR is archived and read-only

This mirror preserves historical PEAR package releases and metadata so existing references remain available.

Home » Authentication » LiveUser » Bug #1532

Database issues

Details

Submitted2004-05-31 07:40 UTC
Frommpuglin at yahoo dot com
Assignedlsmith
StatusClosed
PackageLiveUser
PHP Version4.3.2
OSWin XP
Roadmaps(Not assigned)

Comments

[2004-05-31 07:40 UTC] mpuglin at yahoo dot com

Description:
------------
Using version 0.11.1 of LiveUser.

Various database inconsistencies seem to be apparent:

1) LOTS of inconsistencies with the "ID" field used as primary key in many tables. Please decide whether this field is int(10) or int(11) and be consistent within all tables.

There are problems even in tables which refer to the same entities. For example:

liveuser_areas defines ID as: area_id int(11)
yet, liveuser_areas_seq defines ID as: id int(10).

liveuser_right_scopes: right_id int(11)
liveuser_rights: right_id int(10)

May lead to truncation issues in some cases.

liveuser_perm_users defines perm_user and auth_user differently. perm_user utilizes an int as the primary key. auth_user utilizes a varchar.

The admin class method addUser supposedly will add a user to both tables with the same id. How does this work or make sense considering the two different datatypes?

2) The "x_define_name" column. Sometimes it is varchar(20), sometimes it is varchar(32).

3) - Seems to be a problem with the SQL used to build the liveuser_translations table. We needed to modify two indexes to make them non-unique.
Modify the following two indexes on the translations table to be non-unique:
- uc_ltranslations_section_id
- uc_translations_section_type

[2004-05-31 09:20 UTC] smith at backendmedia dot com

1) Arnaud already addressed the issues. Generally there seems to be a misunderstanding in how the auth_user_id and perm_user_id work. The perm_user_id is the unique identifier for a user, just as the auth_user_id along with an auth_container_name is a unique identifier for a user. These two identifier are mapped to eachother in the liveuser_perm_users table. Remember that LiveUser also supports LDAP etc. That is why the liveuser_perm_users table needs to define auth_user_id as a varchar. The auth container also defines auth_user_id in the liveuser_users table as a varchar just to make life easier for people migrating over. However since the admin classes uses a sequence to generate auth_user_id's you can safely modify this to int(11) in liveuser_users. However if you would change this in liveuser_perm_users you will run into trouble if you start using other auth containers (like LDAP etc).

2) Arnaud seems to have fixed that one

3) I also dont quite understand your concerns on the liveuser_translations table. There is currently only a single primary key index on that table which looks quite alright to me

[2004-06-01 16:46 UTC] mpuglin at yahoo dot com

RE: Translations table.

The primary key is fine. However, it appears that individual indexes were also added on the same two columns used within the primary key.

- uc_ltranslations_section_id
- uc_translations_section_type

These indexes are defined as unique. This would appear to only allow one record with each section id and/or section type. This quickly broke when I added an application, area, and rights.

Perhaps I misunderstand?

[2004-06-02 16:25 UTC] mpuglin at yahoo dot com

An addtional comment regarding database schema:

The primary key for the liveuser_users table currently consists of auth_user_id and handle. I suggest changing the primary key to only consist of the auth_user_id.

Rationale:

1) auth_user_id should always be unique, by itself. It is, by definition, a unique ID.

2) Many websites allow the user to use their email address as their login ID. This has a couple benefits. One, it is easier for the user to remember. Two, it allows for greater number of easily remembered login ID. For example, there may be many John Smiths. But, using UserIds (not emails) only the first lucky contestant gets to use jsmith as a UserId. The subsequent tries must use somthing like "jsmith02" etc... "Email as UserId" alleviates this.

If you agree that using email as the LiveUser handle is a good idea, there is a problem. Currently, handle is part of the primary key. Many databases do not allow you to change a primary key value.

Something to think about.

[2004-06-03 16:38 UTC] smith at backendmedia dot com

How about something like this?

PRIMARY KEY auth_user_id (`auth_user_id`),
UNIQUE KEY `handle` (`handle`)

[2004-06-03 20:44 UTC] mpuglin at yahoo dot com

Works for me.

[2004-06-03 20:52 UTC] smith at backendmedia dot com

This bug has been fixed in CVS.

In case this was a documentation problem, the fix will show up at the
end of next Sunday (CET) on pear.php.net.

In case this was a pear.php.net website problem, the change will show
up on the website in short time.

Thank you for the report, and for helping us make PEAR better.