Note sure what you actually did; the CREATE TABLE statement should pass. It would be easier to make dbo owner of the schema from the start, but it does not matter. Maybe you have a DENY in the mix somewhere.
Anyway, this script runs on my machine without errors:
USE [master]
GO
CREATE DATABASE ST_Demo
go
CREATE LOGIN TestLogin1
WITH PASSWORD='?????????',
DEFAULT_DATABASE=ST_Demo;
GO
USE ST_Demo
go
CREATE USER TestUser1 FOR LOGIN TestLogin1
WITH DEFAULT_SCHEMA=TestUser1;
GO
CREATE SCHEMA TestUser1
AUTHORIZATION TestUser1;
GO
GO
ALTER AUTHORIZATION ON SCHEMA::[TestUser1] TO [dbo]
GO
GRANT ALTER ON SCHEMA::[TestUser1] TO [TestUser1]
GO
GRANT CONTROL ON SCHEMA::[TestUser1] TO [TestUser1]
GO
GRANT SELECT ON SCHEMA::[TestUser1] TO [TestUser1]
GO
GRANT DELETE ON SCHEMA::[TestUser1] TO [TestUser1]
GO
GRANT INSERT ON SCHEMA::[TestUser1] TO [TestUser1]
GO
GRANT UPDATE ON SCHEMA::[TestUser1] TO [TestUser1]
GO
GRANT CREATE TABLE TO TestUser1;
GO
EXECUTE AS LOGIN = 'TestLogin1'
go
CREATE TABLE Customer
(
CustomerID int NOT NULL IDENTITY(1,1),
CustomerName varchar(25) NOT NULL,
StateCode char(2) NOT NULL,
CreditLimit money NULL
);
GO
REVERT
Go
USE tempdb
go
DROP DATABASE ST_Demo
DROP LOGIN TestLogin1
[font="Times New Roman"]Erland Sommarskog, SQL Server MVP, www.sommarskog.se[/font]